对于 C# 中 Task 的 StartNew 与 WhenAll 相互配合的实验
原文中文,约2800字,阅读约需7分钟。发表于: 。对于 C# 中 Task 的 StartNew 与 WhenAll 相互配合的实验独立观察员 2023 年 3 月 28 日一、起因最近写了一段需要等待几个任务(Task)执行完毕的代码,其中任务是使用 Task.Factory.StartNew 的形式。为什么不用 Task.Run 呢?因为这些任务可能耗时较长,由于 Task 默认是基于线程池的,为了避免耗时较长的任务挤占了软件中其它任务的生存...
本文讨论了C#中Task的StartNew和WhenAll的配合使用,通过实验验证了不同情况下的效果。作者得出结论:使用Task.Factory.StartNew方法启动同步方法或Task.Run方法,配合await Task.WhenAll能达到预期效果;但如果Task.Factory.StartNew方法启动的是异步方法,则需要加上Unwrap方法。作者还发现异步方法中无法获取Task.CurrentId的值,而Thread.CurrentThread.ManagedThreadId则稳定。文章提供了测试程序的源码地址,鼓励读者自行探索其他组合情况和发现。