如果异步请求的异步回调已完成,如何收到通知

本文关键字:异步 何收 通知 已完成 请求 回调 如果 | 更新日期: 2023-09-27 17:55:55

在此示例中,发出异步请求,当它完成时,从其回调发出另一个异步请求。当第二个回调完成时,如何从第一个线程(主线程)通知我?通常我会监视 IAsyncResult,但第二个请求的创建不是在第一个线程的范围内完成的,所以我无法访问它。

如果异步请求的异步回调已完成,如何收到通知

解决此问题的最简单方法可能是不这样做 - 第二个回调可以同步(使用 GetResponse 而不是 BeginGetResponse ),然后您可以监控 IAsyncResult。

或者,您也可以使用他们用来防止主线程结束的相同方法:创建另一个

private static ManualResetEvent allDone = new ManualResetEvent(false);

然后在第一个回调中使用

allDone.WaitOne();

并致电

allDone.Set();

在第二个回调中

你的回调必须向第一个线程发出信号,表明它已经完成。例如,它可以使用事件来做到这一点。 TaskCompletionSource是一个等待友好的选择。