c# – 与过期异步调用操作
发布时间:2020-12-15 21:13:03 所属栏目:百科 来源:网络整理
导读:我有一个经典的异步消息调度问题.本质上,我需要异步调度消息,然后在调度完成时捕获消息响应.问题是,我似乎无法弄清楚如何使任何一个请求周期自我过期和短路. 以下是我目前使用的模式示例: 为invokation定义的委托 private delegate IResponse MessageDispat
我有一个经典的异步消息调度问题.本质上,我需要异步调度消息,然后在调度完成时捕获消息响应.问题是,我似乎无法弄清楚如何使任何一个请求周期自我过期和短路.
以下是我目前使用的模式示例: 为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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |