Обращение к объекту из другого потока. И немного 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("Таск выполняется. освободили клиента от ожидания...");           
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы