我試圖同步異步調用。使異步調用同步
常規(異步)流量的樣子:
- 問計使用telnet數據的服務器: 'Session.sendToTarget(消息)'
- 在做其他事情的應用程序移動...
- 當服務器應答就緒時,服務器發送結果。
- 的應用程序得到的結果,提高事件「OnDataReceived」
的數據從服務器是爲下一步所以我想,直到它的接收來保存所有的關鍵。
的同步流應該是這樣的:
- 問計數據的服務器:Session.sendToTarget(消息)
- 等待,直到從服務器
接收到的數據使用C# ,我嘗試將操作與'WaitHandle.WaitOne(TimeToWaitForCallback)'同步失敗,似乎WaitOne暫停接收傳入消息的應用程序(我試過以及等待其他人)。 Afther 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();
}
任何想法?
當然'WaitHandler。WaitOne'阻止當前線程並等待任務,直到處理程序發出信號。這不是你想要的嗎?你說你想要「等到從服務器收到數據」。 – 2010-12-10 08:41:19
是的,我想等,但阻止阻止我的應用程序獲取服務器傳入的消息,所以處理程序從不發送信號,它停止等待超時。 – 2010-12-10 11:56:48