这个问题有点创意,而且很有建筑性。
任务如下,有一个接受请求的方法和一组事件,通过这些事件发送响应。例如:
interface IClient
{
void GetSomethingRequest();
}
interface IObserver
{
event Action SomethingRequestStatus;
event Action<object> SomethingRequestResponse;
}
该示例有一个发送者和一个观察者。当调用 sender 方法时,我们得到一个“SomethingRequestStatus”回调和 n 个“SomethingRequestResponse”回调。
问题是,将整个结构包装到一个异步方法中的最佳方法是什么,如下所示:
interface IClient
{
public Task<Tuple<bool, object>> GetSomething();
}
我认为以互斥锁为代价,但也许有更正确的解决方案?
还有另一种选择延迟并检查回调响应的填充,但延迟不合适,因为系统必须快速运行。
换句话说,问题是如何以一种新的方式重写基于回调(使用通过套接字与远程服务器交互)的旧版本异步过程,通过调用一个方法,您可以等待系统的响应。
更新:
主要问题不在于数据收集,而在于流的延迟,直到消息停止到达或信号“client.GetSomethingRequest ()”请求未成功完成的“SomethingRequestStatus”事件的到达。
事实上,这是一个服务间交互,但不是通过 http,而是通过套接字。第一个服务器向第二个服务器发送请求。第二个服务器响应,第一个监听响应。那些。client.GetSomethingRequest() 方法 - 通过套接字向第二个服务器发送请求,仅此而已,此方法在收到所有回调之前不会保留流。
既然有很多答案,就少不了Producer/Consumer。我们假设
SomethingRequestStatus这是一个完成数据接收的信号。然后你会得到类似这种方法的东西。并像这样使用它