.net c# Func<Task>及变体做为多播委托异步实行会另开线程的题目 ...

打印 上一主题 下一主题

主题 1974|帖子 1974|积分 5922

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 题目

环境是dotnet8及以前的版本,dotnet9+不知道是否还有这个题目(我猜是一样的)。
如下代码,在多播委托await异步实行时,不会等待委托方法实行完成,它们在新的线程中运行。
  1. async Task A()
  2. {
  3. }
  4. async Task B()
  5. {
  6. }
  7. Func<Task> func;//下面+=运算赋值为多播委托
  8. func+=async()=>await A();
  9. func+=async()=>await B();
  10. await func();//这里不会等待A和B方法执行完成,它们在新的线程中运行
复制代码
2. 解决

用GetInvocationList方法取得所有委托方法,逐个实行。
  1. Func<Task> func;//下面+=运算赋值为多播委托
  2. func+=async()=>await A();
  3. func+=async()=>await B();
  4. var subscribers = func.GetInvocationList();//取得多播委托的每个方法然后逐个执行
  5. foreach(var subscriber in subscribers)
  6. {
  7.     var asyncMethod = (Func<Task>)subscriber;
  8.     await asyncMethod();
  9. }
复制代码
3. 总结

同样的道理,也适用于变乱,因为变乱自己也是委托。用这个办法就可以解决变乱、委托、Action、Func等同步还是异步实行的题目。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表