对于 C# 中 Task 的 StartNew 与 WhenAll 相互配合的实验

💡 原文中文,约2800字,阅读约需7分钟。
📝

内容提要

本文讨论了C#中Task的StartNew和WhenAll的配合使用,通过实验验证了不同情况下的效果。作者得出结论:使用Task.Factory.StartNew方法启动同步方法或Task.Run方法,配合await Task.WhenAll能达到预期效果;但如果Task.Factory.StartNew方法启动的是异步方法,则需要加上Unwrap方法。作者还发现异步方法中无法获取Task.CurrentId的值,而Thread.CurrentThread.ManagedThreadId则稳定。文章提供了测试程序的源码地址,鼓励读者自行探索其他组合情况和发现。

🎯

关键要点

  • 使用 Task.Factory.StartNew 启动同步方法或 Task.Run 方法,配合 await Task.WhenAll 能达到预期效果。
  • 如果 Task.Factory.StartNew 启动的是异步方法,则需要加上 Unwrap 方法。
  • 异步方法中无法获取 Task.CurrentId 的值,而 Thread.CurrentThread.ManagedThreadId 则稳定。
  • 实验中展示了五种情况,结果显示除了异步方法的情况外,其他情况均正常。
  • 建议读者自行探索其他组合情况和发现。
➡️

继续阅读