我知道创建太多线程(线程饥饿)对我的应用程序的性能不利,但我不确定这如何转化为 Async/Await 功能。我了解 Task.Run() 使用 ThreadPool 来执行其代码。另外我读到它并不总是创建一个新线程。
现在我有 3 点我找不到答案:
我是否需要确保没有太多手动线程或将由 .Net-Framework 管理?
此代码会导致线程饥饿吗?
Dim ltsk As List(Of Task) For Each pers As Person In ListPerson 'Potentialy big Collection of Objects ltsk.Add(Task.Run(Sub() pers.CheckPerson)) 'Long running function with own Task.Run() inside Next Task.WhenAll(ltsk)
这是否会创建一个线程?
Dim i As Integer = 0 Task.Run(Sub() i += 1) 'I know its an insane example
我在我的新应用程序中使用类似于我在 (2.) 中要求的代码,并获得超过 90% 的 CPU 使用率。通常当我得到这么高的使用率时,我做错了。