ThreadPool.QueueUserWorkItem вызывает зависание приложения до завершения - PullRequest
3 голосов
/ 10 декабря 2010

Это может быть связано с отсутствием понимания того, что происходит под капотом, или просто с отсутствием понимания потоков.Когда пользователь входит в систему, мне нужно запустить некоторые задачи, которые вызывают веб-службы для обновления данных в моей системе.Так как сервисы могут занимать значительное количество времени, я выполняю весь процесс.Однако, несмотря на то, что я думаю, что выполняю всю серию задач в потоке, отдельном от моего приложения, мое приложение ждет, пока вызванная функция не завершится, прежде чем она продолжит работу.Функция «RunAccountUpdater» завершается и происходит обратный вызов.Что я делаю не так / не понимаю?

1 Ответ

0 голосов
/ 10 декабря 2010

Проходите, вы фактически делаете там оператор за оператором - это будет obviouss.

ThreadPool.QueueUserWorkItem (new SafeWaitCallback (). Вызов (identity, делегат (объект noCallBack) {manager.RunAccountUpdater (идентичность);}));

Это происходит изнутри.

  • Вы объявляете делегата.
  • Затем вы используете SafeWaitCallback (). ВызовВЫПОЛНИТЬ операцию.
  • Затем вы ставите в очередь результат Call to .... в пул потоков.

Вуаля - вот ваша проблема.Вы должны поставить в очередь вызов делегату, а не результат выполнения.

...