如果异步请求的异步回调已完成,如何收到通知
本文关键字:异步 何收 通知 已完成 请求 回调 如果 | 更新日期: 2023-09-27 17:55:55
在此示例中,发出异步请求,当它完成时,从其回调发出另一个异步请求。当第二个回调完成时,如何从第一个线程(主线程)通知我?通常我会监视 IAsyncResult,但第二个请求的创建不是在第一个线程的范围内完成的,所以我无法访问它。
解决此问题的最简单方法可能是不这样做 - 第二个回调可以同步(使用 GetResponse
而不是 BeginGetResponse
),然后您可以监控 IAsyncResult。
或者,您也可以使用他们用来防止主线程结束的相同方法:创建另一个
private static ManualResetEvent allDone = new ManualResetEvent(false);
然后在第一个回调中使用
allDone.WaitOne();
并致电
allDone.Set();
在第二个回调中
你的回调必须向第一个线程发出信号,表明它已经完成。例如,它可以使用事件来做到这一点。 TaskCompletionSource
是一个等待友好的选择。