1 コアのマシンを使用しており、async と await を使用してコードのパフォーマンスを改善したいと考えています。コードには 2 つの主要な部分があります。最初の IO 操作。(複数のセッション ID の Azure サービス バス キューからの読み取り)、2 番目のデータの処理 - CPU の負荷が高い。Task を返す async メソッドで DequeueAsync メソッドをラップしました。
private async Task<SomeReturnValue> AcceptFromQueueAsync(){
try{
SomeReturnValue result = await DequeueAsync.configureAwait(false);
return SomeReturnValue;
}
catch{
//logging and stuff
}
CPU 負荷の高い方法は同期です: DoSyncWork() 2 番目の部分は CPU 負荷が高いので、並列処理を使用したくありません (実際には使用できません...) CPU 部分は、IO 部分が終了したときにのみ開始できます。上記を考えると、次の実装は1つのCPUマシンで行う方法ですか?
private void AcceptAndProcessWrapper(){
//Count is some cosnt defined outside the method
_acceptTasks = new List<Task<SomeReturnValue>>();
for (var i = 0; i < Count; i++)
{
_acceptTasks.Add(AcceptFromQueueAsync());
}
//The use of list is for convince in processing
Task.WaitAll(_acceptTasks.ToArray());
//The CPU part
Task.Run(DoSyncWork).Wait();
}
同期部分に Task.Run() を使用できなかった可能性があることはわかっていますが、複数のコアで機能を実装できるようにしたい (Task.Run() を使用していくつかのタスクを開始し、それらを配列に保持することにより) 上記の実装は. (タスクを返す async メソッドを複数回呼び出すと) パフォーマンスが向上しますか? または、Task.Run(AcceptFromQueueAsync) などの非同期呼び出しごとに新しいタスクを開始する必要がありますか?