疑问的产生是对一个TaskCompletionSource的一系列工作方式产生疑问,根源是对事件的产生与处理机制不甚了解
一个对象能根据某种状态的改变发送消息,即产生一个事件;
一个方法可以订阅某个事件,当事件发生时进行触发
在异步中的应用
需要等待peer.PeersDataReceived这个事件发生后,再进行peers显示的相关操作
则令方法Peer1_PeersDataReceived()订阅该事件
peer.PeersDataReceived += Peer1_PeersDataReceived;而方法中对一个TaskCompletionSource类型的对象completionSource进行执行TrySetResult()
private static void Peer1_PeersDataReceived(object sender, EventArgs e)
{
var a = completionSource.TrySetResult();
return;
}当该方法调用后返回,则异步等待的下列语句得到执行,程序继续运行
await completionSource.Task;对事件的监听是通过观察者设计模式实现的
public class BaggageHandler : IObservable<BaggageInfo>拥有一系列observer,将需要提供的信息逐个发送给它们
foreach (var observer in observers)
observer.OnNext(info);结束提供消息,调用 OnCompleted() 方法
实现订阅subscribe。由于需要在取消订阅后,则在进行订阅时返回一个IDisposable类型的对象,相当于进行标记。而这个对象实现Dispose()的方法,即可以自主取消订阅。