Я пытаюсь синхронизировать асинхронный вызов.
Обычный ( асинхронный ) поток выглядит следующим образом:
- Запрос данных на сервере с помощью telnet: 'Session.sendToTarget (message)'
- Приложение движется к другим вещам ....
- Когда ответ сервера готов, сервер отправляет результат.
- Приложение получит результат и вызовет событие «OnDataReceived»
Данные с сервера важны для следующего шага, поэтому я хочу хранить ВСЕ, пока они не будут получены.
Поток sync должен выглядеть следующим образом:
- Запрос данных на сервере: Session.sendToTarget (message)
- Дождаться получения данных с сервера
Используя c #, я безуспешно пытался синхронизировать операцию с WaitHandle.WaitOne (TimeToWaitForCallback). Похоже, что WaitOne остановил приложение для получения входящих сообщений (я также пытался подождать в других сообщениях) После истечения времени TimeToWaitForCallback я получаю входящее сообщение, которое было приостановлено действием WaitOne.
моя попытка синхронизации кода:
public virtual TReturn Execute(string message)
{
WaitHandle = new ManualResetEvent(false);
var action = new Action(() =>
{
BeginOpertaion(message);
WaitHandle.WaitOne(TimeToWaitForCallback);
if (!IsOpertaionDone)
OnOpertaionTimeout();
});
action.DynamicInvoke(null);
return ReturnValue;
}
Входящие поднимают этот код:
protecte protected void EndOperation(TReturn returnValue)
{
ReturnValue = returnValue;
IsOpertaionDone = true;
WaitHandle.Set();
}
Есть идеи?