当前位置:   article > 正文

了解 .NET 的默认 TaskScheduler 和线程池(ThreadPool)设置,避免让 Task.Run 的性能急剧降低_.net7 web.config threadpool

.net7 web.config threadpool

.NET Framework 4.5 开始引入 Task.Run,它可以很方便的帮助我们使用 async / await 语法,同时还使用线程池来帮助我们管理线程。以至于我们编写异步代码可以像编写同步代码一样方便。

不过,如果滥用,也可能导致应用的性能急剧下降。本文将说明在默认线程池配置(ThreadPoolTaskScheduler)的情况下,应该如何使用 Task.Run 来避免性能的急剧降低。


如何使用 Task.Run?

  1. 对于 IO 操作,尽量使用原生提供的 Async 方法(不要自己使用 Task.Run 调用一个同步的版本占用线程池资源);
  2. 对于没有 Async 版本的 IO 操作,如果可能耗时很长,则指定 CreateOptionsLongRunning
  3. 其他短时间执行的任务才推荐使用 Task.Run

接下来分析原因:

示例程序和示例代码

在开始之前,我们先准备一个测试程序。这个程序一开始就使用 Task.Run 跑起来 10 个异步任务,每一个里面都等待 5 秒。

使用 Task.Run 跑起来的异步代码

可以发现,虽然我们是同一时间启动的 10 个异步任务,但任务的实际开始时间并不相同 —— 前面 8 个任务立刻开始了,而后面每隔一秒才会启动一个新的异步任务。

示例程序的代码如下:

class Program
{
   
    static async Task Main(string
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/104591
推荐阅读
相关标签
  

闽ICP备14008679号