41

以下のコード スニペットに違いはありますか。もしそうなら、何?

myList.AsParallel().ForAll(i => { /*DO SOMETHING*/ });

Parallel.ForEach(mylist, i => { /*DO SOMETHING*/ });

メイン スレッドは、すべての子スレッドが完了するまで待機しますか? MVC アプリケーションで、コントローラー アクションで並列処理を行っている場合、メイン スレッドの完了後に子スレッドはどうなりますか。メインスレッドが完了した後でも、それらは中止されますか、それとも完了しますか?

4

4 に答える 4

23

Parallel.ForEach()まさにこの種のコードを対象としています。

一方、ForAll()は、(おそらく複雑な)PLINQクエリの最後に使用することを目的としています。

Parallel.ForEach()そのため、ここではより良い選択だと思います。

どちらの場合も、現在のスレッドが(スレッドプールからのいくつかのスレッドとともに)計算を実行するために使用され、メソッドはすべての処理が完了した後にのみ返されます。

于 2013-01-08T13:17:08.207 に答える
3

Concurrency in C# Cookbook に書かれているように:

と PLINQの違いの 1 つParallelは、PLINQ はコンピューター上のすべてのコアを使用できると想定している一方で、ParallelCPU の状態の変化に動的に反応することです。

于 2021-01-03T19:54:18.337 に答える