-2

MSDNのタスクに関する Microsoft のチュートリアルを見ました。

Parallel.ForEach() 静的メソッド呼び出しを示す例を示しています。そのメソッド呼び出しでは、4 つのパラメーターがあります...最初のパラメーターは Int の配列である必要がありますか? それとも、すべてのスレッドが取り組んでいる何らかの種類のコレクションまたはオブジェクトでしょうか? 2 番目のパラメーターは、値 (または void) を返さないデリゲートである Action のようです。その2番目の変数は一体何のためですか?スレッド ローカル初期化子? 0 に初期化する理由 ここで一体何が設定されているのですか?3番目のパラメーターは単なるデリゲート(または私が考えるのが好きな関数ポイント)であり、ラムダ式の右側は実際の関数ですか?たとえば、実際の関数の名前をそこに書かずにその側に置くことはできますか? 例えば...

    public int localSum(int n, ParallelLoopState loopState, int localSum) {
        localSum += n;
        Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum);
        return localSum;
    }

(n, loopState, localSum) => localSum(int n, ParallelLoopState loopState, int localSum),
4

2 に答える 2

1

このオーバーロードのように見えます:

public static ParallelLoopResult ForEach<TSource, TLocal>(
    IEnumerable<TSource> source,
    Func<TLocal> localInit,
    Func<TSource, ParallelLoopState, TLocal, TLocal> body,
    Action<TLocal> localFinally
)

あなたが持っている場所:

Parameters

source
    Type: System.Collections.Generic.IEnumerable<TSource>

    An enumerable data source.

localInit
    Type: System.Func<TLocal>

    The function delegate that returns the initial state of the local data for each task.

body
    Type: System.Func<TSource, ParallelLoopState, TLocal, TLocal>

    The delegate that is invoked once per iteration.

localFinally
    Type: System.Action<TLocal>

    The delegate that performs a final action on the local state of each task.
于 2012-10-31T14:36:01.107 に答える
0

2番目のパラメーターはAction<int>、通常のforeachループの本体のようなものです。使用する最も簡単な方法Parallel.ForEachは、2つのパラメーターのオーバーロードです。

Parallel.ForEach(myIntegers, i => loopBody(i));

// non-parallel equivalent
foreach(int i in myIntegers)
{
    loopBody(i);
}

myIntegers任意IEnumerable<int>にすることができるため、必ずしも配列である必要はありません。

于 2012-10-31T14:37:31.290 に答える