我有一个经典的异步消息调度问题。本质上,我需要异步发送消息,然后在发送完成时捕获消息响应。问题是,我似乎无法弄清楚如何使任何一个请求周期自行过期和短路。
这是我目前正在使用的模式示例:
为调用定义委托(delegate)
private delegate IResponse MessageDispatchDelegate(IRequest request);
通过回调发送消息
var dispatcher = new MessageDispatchDelegate(DispatchMessage);
dispatcher.BeginInvoke(requestMessage, DispatchMessageCallback, null);
发送消息
private IResponse DispatchMessage(IRequest request)
{
//Dispatch the message and throw exception if it times out
}
将调度结果作为响应或异常获取
private void DispatchMessageCallback(IAsyncResult ar)
{
//Get result from EndInvoke(r) which could be IResponse or a Timeout Exception
}
我想不通的是如何在 DispatchMessage 方法中干净地实现超时/短路过程。任何想法将不胜感激
最佳答案
var dispatcher = new MessageDispatchDelegate(DispatchMessage);
var asyncResult = dispatcher.BeginInvoke(requestMessage, DispatchMessageCallback, null);
if (!asyncResult.AsyncWaitHandle.WaitOne(1000, false))
{
/*Timeout action*/
}
else
{
response = dispatcher.EndInvoke(asyncResult);
}
关于c# - 过期异步调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4349902/