アプリケーションのパフォーマンスがあまりにも多くのスレッドを作成する (スレッドスターベーション) の悪いことは知っていますが、これが 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.) で求めているものと同様のコードを使用すると、CPU 使用率が 90% を超えます。通常、このように使用率が高くなると、何か問題が発生します。