gpt4 book ai didi

c# - 过期异步调用操作

转载 作者:行者123 更新时间:2023-11-30 12:52:34 25 4
gpt4 key购买 nike

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com