#c# #multithreading #asynccallback #manualresetevent #waitone
#c# #многопоточность #обратный вызов asynccallback #manualresetevent #waitone
Вопрос:
- Я вызываю метод WebService через Exe-файл командной строки.
- Этот вызов метода является асинхронным вызовом, и я использую WaitOne после вызова.
- Я выполняю ManualRest.Set() в завершенном методе.
Вышеуказанная настройка работает нормально в 99% случаев, когда метод async возвращает результат в течение 10-20 минут,
Проблема возникает, когда асинхронный вызов занимает больше времени, например, 2-3 часа, тогда код после WaitOne() не выполняется.
Я записываю журналы до и после waitone (), а также в завершенном событии, но элемент управления не возвращается после 3 часов асинхронного вызова.
Любая справка / указатель выше…
Спасибо.
Комментарии:
1. Пожалуйста, опубликуйте некоторый код вместо того, чтобы просто описывать его. Детали важны, и они теряются, когда вы описываете свой код своими словами.
Ответ №1:
Вы уверены, что вызывается Set ? Используете ли вы System.Diagnostics.Process
? Пожалуйста, опубликуйте код для того, как вы используете процесс в своем вопросе.
При использовании процесса существует чрезвычайно высокий риск создания взаимоблокировки, особенно если вы используете примеры кода в MSDN, которые показывают вам, как синхронно читать из StandardIn и StandardOut .
Попробуйте вместо этого использовать методы асинхронного чтения, чтобы избежать взаимоблокировки.
Комментарии:
1. Спасибо за ваш быстрый ответ! Да, я использую System. Диагностика. Процесс и до сих пор не использует BeginOutputReadLine , будет опробован…