本文主要是介绍了解 .NET 的默认 TaskScheduler 和线程池(ThreadPool)设置,避免让 Task.Run 的性能急剧降低,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
.NET Framework 4.5 开始引入 Task.Run
,它可以很方便的帮助我们使用 async
/ await
语法,同时还使用线程池来帮助我们管理线程。以至于我们编写异步代码可以像编写同步代码一样方便。
不过,如果滥用,也可能导致应用的性能急剧下降。本文将说明在默认线程池配置(ThreadPoolTaskScheduler
)的情况下,应该如何使用 Task.Run
来避免性能的急剧降低。
本文内容
- 如何使用 Task.Run?
- 示例程序和示例代码
- TaskScheduler
- ThreadPool
- 推荐的使用方法
- 参考资料
如何使用 Task.Run?
- 对于 IO 操作,尽量使用原生提供的
Async
方法(不要自己使用Task.Run
调用一个同步的版本占用线程池资源); - 对于没有
Async
版本的 IO 操作,如果可能耗时很长,则指定CreateOptions
为LongRunning
。 - 其他短时间执行的任务才推荐使用
Task.Run
。
接下来分析原因:
示例程序和示例代码
在开始之前,我们先准备一个测试程序。这个程序一开始就使用 Task.Run
跑起来 10 个异步任务,每一个里面都等待 5 秒。
可以发现,虽然我们是同一时间启动的 10 个异步任务,但任务的实际开始时间并不相同 —— 前面 8 个任务立刻开始了,而后面每隔一秒才会启动一个新的异步任务。
示例程序的代码如下:
class Program
{static async Task Main(string[
这篇关于了解 .NET 的默认 TaskScheduler 和线程池(ThreadPool)设置,避免让 Task.Run 的性能急剧降低的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!