所以这是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);
  }
]

08-19 17:29