如何解决事件返回任务的奇怪行为没有完全执行所有订阅的方法
我有以下事件:
public static event Func<object,EventArgs,Task> Blocker;
我订阅了以下匿名方法:
Blocker += async (x,y) => { await Task.Delay(20); Console.WriteLine("Task1"); };
Blocker += async (x,y) => { await Task.Delay(10); Console.WriteLine("Task2"); };
Blocker += async (x,y) => { await Task.Delay(5000); Console.WriteLine("Task3"); };
Blocker += async (x,y) => { await Task.Delay(1000); Console.WriteLine("Task4"); };
现在,如果我通过编写 await Blocker(null,null);
来调用该事件,这将在所有订阅的方法返回之前返回,但是如果我沿着执行它们的漫长路径走下去,请执行以下操作:
foreach (var item in Blocker.GetInvocationList())
{
await ((Func<object,Task>)item)(null,null);
}
未发现此类异常。
这里到底发生了什么?我想在幕后,调用事件依次使用类似的 for 循环逻辑来遍历订阅的方法?我猜这是因为 await 关键字正在处理 Blocker(null,null)
的返回任务,并且因为这是一个事件,所以它会感到困惑并最终做出正确的行为,即使对我来说它看起来是错误的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。