所以这是deleagt和event
public delegate Task SomeEventHandler(SomeEventArgs e);
...
public event SomeEventHandler OnSomething;
订户(多个)
some.OnSomething += DoSomething;
...
public async Task DoSomething(SomeEventArgs e) {
await SomethingElse();
e.A = true;
}
事件调用
if (this.OnSomething != null)
await this.OnSomething(args);
// Here args.A is false
// It should be true
问题是,即使剂量测量没有完成,最后一部分仍在继续。有什么问题吗?
最佳答案
这里的问题是SomeEventHandler
的多个实例正在运行,因此正在创建多个Task
值。await
调用只在其中一个上运行,因此是否最终等待的是DoSomething
方法,这在一定程度上取决于运气。
要解决这个问题,您需要在创建的每个await
值上Task
。
if (this.OnSomething != null) {
foreach (var d in this.OnSomething.GetInvocationList().Cast<SomeEventHandler>()) {
await d(args);
}
]