Обращение к объекту из другого потока. И немного WCF - C#
Формулировка задачи:
Здравствуйте! Нужна ваша помощь, прежде небольшой ввод в задачу которую я решаю)
Есть веб служба которая предоставляет пользователю интерфейс для создания различных тасков.
В данный момент есть объект TaskManager к которому обращается служба.
Обобьет отвечает
1) Создание таска и занесение базу данных.
2) Выполнение таска
Я хочу вынести TaskManager в отдельный поток, что бы они работали в независимости друг от друга.
Иными словами пользователь сказал я хочу сделать то-то, служба ему ответила хорошо все будет сделано и передала задачу таск менеджеру который у нас во втором потоке. Пользователь получил ответ что все хорошо вне зависимости от того выполнился таск, завис в очереди или крашнулся с ошибкой.
http://www.cyberforum.ru/attachment....1&d=1484820781
вот схема того как я это вижу...
Вопрос заключает вот в чем...
Когда клиент обращаешься к службе, то получает null referenсe exception, я не силен в много поточности но полагаю что это потому
что мы объявили taskManager в потоке 1 а инициализировали потоке2 как получить доступ к этому объекту Правилен ли такой подход?
Спасибо!
class Service : IService
{
private TaskManager taskManager;
public Service()
{
Thread taskManagerThread = new Thread(InitializeTaskManager);
taskManagerThread .Start();
}
private void InitializeTaskManager ()
{
taskManager = TaskManager.Instance;
}
// Метод который доступен клиенту
public void CreateTask1 ( == data ==)
{
taskManager.CreateTask1( == data == )
}
}Решение задачи: «Обращение к объекту из другого потока. И немного WCF»
textual
Листинг программы
public void CreateDxf(int[] filesId)
{
int nWorkerThreads;
int nCompletionThreads;
ThreadPool.GetMaxThreads(out nWorkerThreads, out nCompletionThreads);
foreach (var item in filesId)
{
ThreadPool.QueueUserWorkItem(delegate (object state)
{
taskManager.CreateDxf(filesId);
});
}
Console.WriteLine("Таск выполняется. освободили клиента от ожидания...");
}