c# - 过期异步调用操作

标签 c# .net multithreading asynchronous delegates

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

这是我目前正在使用的模式示例:

为调用定义委托(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/

相关文章:

c - 如何检查当前是否有任何线程正在运行

c++ - Linux:应用程序响应和 select()

c# - .Net 跳码

c# - 使用 linq 时,在 .ForEach() 之前调用 .Any() 有什么好处吗?

c# - 将 Microsoft.AspNetCore.Http.HttpRequest 转换为 HttpRequestMessage

c# - Azure 应用服务中的 System.BadImageFormatException : Bad binary signature.

c# - 是否有用于 ASP.NET MVC 的混合身份验证配置 ASP.NET 模块 (MADAM) 的端口?

Java简单的递归算法,使其并行化

c# - 如何将 WPF 控件的边距绑定(bind)到属性?

C#如何提取字符串的一部分