gpt4 book ai didi

c# - 如何等待带有回调的外部响应?

转载 作者:行者123 更新时间:2023-12-03 12:03:19 25 4
gpt4 key购买 nike

我已经在这个主题上进行了很多搜索,但是我认为我没有使用正确的词来搜索这些东西,因为我还没有找到答案。

我正在寻找一种使流程等待外部源(特定)响应的方法。

更详细地讲,在标准套接字连接中,我通过socket.send向远程端点询问某个值,如何“捕获”他们的答复?我已经拥有的想法是发送某种标识符来确定它属于什么请求。

有没有办法有效地做到这一点? (性能相当重要)。如果这是相关信息,我目前正在使用.NET2.0。

一些示例代码:

    public void AskForReply()
{
//Send to connected endpoint
}

public void ReceiveReply(IAsyncResult response)
{
//Do stuff with the response
}

我脑子里一直在想出几个主意。但是他们都感到非常困惑,效率不高。是否有设计模式?有这种行为的标准吗?

非常感谢您的帮助!

最佳答案

对于遇到类似问题的任何人,我都找到了一种使异步调用同步的方法(从本质上讲,这是您要实现的目标)。

    EventWaitHandle waitHandler;
string replyMessage;

void string AskForReply()
{
//Already requesting something...
if(waitHandler != null) { return; }
waitHandler = new EventWaitHandle(false, EventResetMode.AutoReset);

//Send a request to a remote service

waitHandler.WaitOne(timeout);

//Will reply null (or the default value) if the timeout passes.
return replyMessage;
}

void ReceiveReply(string message)
{
//We never asked for a reply? (Optional)
if (waitHandler != null) { return; }
replyMessage = message;
//Process your reply

waitHandler.Set();
waitHandler = null;
}

最好将EventWaitHandle和回复消息放在一个类中,以实现更好,更清洁的管理。然后,您甚至可以将此对象与一个 key 一起放入字典中,您可以使用该 key 一次处理多个请求(请记住,它们是同步的,并且会阻塞您的线程,直到设置了超时或等待句柄为止)。

关于c# - 如何等待带有回调的外部响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235590/

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