6

ラムダ式はマルチスレッドですか?

たとえば、数式をラムダ メソッドとして記述し、それを別のメソッドに渡すと、マルチスレッドになるでしょうか。

4

7 に答える 7

13

あなたが何を求めているのか100%明確ではありません。

ラムダが別のスレッドで自然に実行されるかどうかを尋ねていますか?

そうでない場合、それらは System.Delegate の単なる別のインスタンスであり、特に要求されない限りメイン スレッドで実行されます。

複数のスレッドで安全に実行できるかどうかを尋ねていますか?

これは、ラムダ式の内容を知っていないと答えられない質問です。それらは本質的にスレッドセーフではありません。私の経験では、予想よりもスレッドセーフである可能性ははるかに低くなります。

于 2009-03-17T20:53:39.483 に答える
6

いいえ、他のメソッドと同様に、別のスレッドに渡さない限り、作成されたスレッドで実行されます。それらが別のスレッドで自動的に実行されることを望まないでしょう、私を信じてください。

于 2009-03-17T20:51:54.573 に答える
3

C# の次のバージョンでは、マルチスレッド オプションが LINQ (PLINQ と呼ばれます) とデリゲートに追加されます。詳細はこちらをご覧ください。現在、それはすべて単一のスレッド上にあります。

于 2009-03-17T20:57:09.723 に答える
3

他の人が言ったように、ラムダ式は本質的にマルチスレッド化されておらず、標準の linq-to-objects 拡張メソッドはそれらを個別のスレッドで呼び出すために特別なことをしません。

ただし、linq のようなマルチスレッド プログラミングを行いたい場合は、Parallel Extensions to .NET Framework を調べてください。このリンクもチェックしてください:
http://blogs.msdn.com/pfxteam/

残念ながら、これは VS2010/.Net4.0 がリリースされるまで RTM にはなりません。

于 2009-03-17T20:57:34.030 に答える
2

ラムダは単なる匿名メソッドであり、別のスレッドで実行するコードを提供しない限り、呼び出されたスレッドで実行されます。

于 2009-03-17T20:52:09.067 に答える
2

混乱する可能性がある(しかし本当の)答え。よく遭遇するいくつかのシナリオでは、ラムダが別のマシンで、まったく異なる種類のランタイム環境で実行されるため、別のスレッドで実行される場合があります。呼び出し元は、続行する前にリモート実行が完全に完了するまで必ずしも待機する必要はありません。

(具体的には、Linq To SQL クエリに渡す場合。)

于 2009-03-17T21:09:27.447 に答える