walterlv / BlogComments

3 stars 0 forks source link

post/task-wait-may-cause-long-time-waiting #51

Open utterances-bot opened 4 years ago

utterances-bot commented 4 years ago

.NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况 - walterlv

.NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况

https://blog.walterlv.com/post/task-wait-may-cause-long-time-waiting.html

ghost commented 4 years ago

Task.Run(async () => await DoAsync(i)) 好像就没问题

walterlv commented 4 years ago

@9527code 是的,你那个不会出问题。会出问题的是因为中间转了一次同步……

sweetjian commented 2 years ago

这跟死锁一点都不一样。只是线程池默认就8个线程,并发数量超过8的时候,后台会创建新的线程,时间就耗在这里了,如果你把16个task再跑一次,你会发现时间基本为零。 或者在代码第一行加上ThreadPool.SetMinThreads(50, 50);,有奇效