赞
踩
.NET Framework 4.5 开始引入 Task.Run
,它可以很方便的帮助我们使用 async
/ await
语法,同时还使用线程池来帮助我们管理线程。以至于我们编写异步代码可以像编写同步代码一样方便。
不过,如果滥用,也可能导致应用的性能急剧下降。本文将说明在默认线程池配置(ThreadPoolTaskScheduler
)的情况下,应该如何使用 Task.Run
来避免性能的急剧降低。
Async
方法(不要自己使用 Task.Run
调用一个同步的版本占用线程池资源);Async
版本的 IO 操作,如果可能耗时很长,则指定 CreateOptions
为 LongRunning
。Task.Run
。接下来分析原因:
在开始之前,我们先准备一个测试程序。这个程序一开始就使用 Task.Run
跑起来 10 个异步任务,每一个里面都等待 5 秒。
可以发现,虽然我们是同一时间启动的 10 个异步任务,但任务的实际开始时间并不相同 —— 前面 8 个任务立刻开始了,而后面每隔一秒才会启动一个新的异步任务。
示例程序的代码如下:
class Program
{
static async Task Main(string
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。