2017-05-14 10 views
0

Parallel ForEachのような機能を提供するよく知られた、よくテストされたナゲットパッケージがありますが、同時に実行される並行タスクの量を制限できますか?ForEach実行可能な並行タスクの量に制限がある非同期?

私は自分で書くことができるので、コードサンプルを尋ねるのではなく、という人気のあるナゲットパッケージがあるかどうかを尋ねるだけです。

ありがとうございます!このような

+3

しかしParallel.ForEachはすでにParallelOptions経由で構築されたこの能力を持っています。 – Evk

+0

しかし、非同期ではありません。 –

答えて

5

何かがあなたが並列度を制御することができます:あなたは1でMaxDegreeOfParallelismを置く場合は、各項目を順次処理されていることがわかります

var items = Enumerable.Range(0, 50); 
var parallelOptions = new ParallelOptions() { MaxDegreeOfParallelism = 3 }; 
Parallel.ForEach(items, parallelOptions, 
    i => 
    { 
     Task.Delay(1000).GetAwaiter().GetResult(); // It's just an example 
     Console.WriteLine($"{DateTime.Now.ToLongTimeString()} I'm {i}"); 
    }); 

MSDN:MaxDegreeOfParallelismこのParallelOptionsインスタンスによって有効にされる同時実行タスクの最大数を取得または設定します。

Parallel.ForEach reference

ParallelOptions reference

+0

これはIOが起こっている間にスレッドをブロックします。実行したいASYNCコードがたくさんあります。スレッドをブロックする理由はありません。 –

関連する問題