微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 与过期异步调用操作

我有一个经典的异步消息调度问题.本质上,我需要异步调度消息,然后在调度完成时捕获消息响应.问题是,我似乎无法弄清楚如何使任何一个请求周期自我过期和短路.

以下是我目前使用的模式示例:

为invokation定义的委托

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,null);
        if (!asyncResult.AsyncWaitHandle.WaitOne(1000,false))
        {
             /*Timeout action*/
        }
        else
        {
            response = dispatcher.EndInvoke(asyncResult);
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐