我试图同步异步调用。使异步调用同步
常规(异步)流量的样子:
- 问计使用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