Веб-сервис: асинхронный вызов завершен: но WaitOne () все еще ждет

#c# #multithreading #asynccallback #manualresetevent #waitone

#c# #многопоточность #обратный вызов asynccallback #manualresetevent #waitone

Вопрос:

  1. Я вызываю метод WebService через Exe-файл командной строки.
  2. Этот вызов метода является асинхронным вызовом, и я использую WaitOne после вызова.
  3. Я выполняю ManualRest.Set() в завершенном методе.

Вышеуказанная настройка работает нормально в 99% случаев, когда метод async возвращает результат в течение 10-20 минут,

Проблема возникает, когда асинхронный вызов занимает больше времени, например, 2-3 часа, тогда код после WaitOne() не выполняется.

Я записываю журналы до и после waitone (), а также в завершенном событии, но элемент управления не возвращается после 3 часов асинхронного вызова.

Любая справка / указатель выше…

Спасибо.

Комментарии:

1. Пожалуйста, опубликуйте некоторый код вместо того, чтобы просто описывать его. Детали важны, и они теряются, когда вы описываете свой код своими словами.

Ответ №1:

Вы уверены, что вызывается Set ? Используете ли вы System.Diagnostics.Process ? Пожалуйста, опубликуйте код для того, как вы используете процесс в своем вопросе.

При использовании процесса существует чрезвычайно высокий риск создания взаимоблокировки, особенно если вы используете примеры кода в MSDN, которые показывают вам, как синхронно читать из StandardIn и StandardOut .

Попробуйте вместо этого использовать методы асинхронного чтения, чтобы избежать взаимоблокировки.

Комментарии:

1. Спасибо за ваш быстрый ответ! Да, я использую System. Диагностика. Процесс и до сих пор не использует BeginOutputReadLine , будет опробован…