0

並列 For ループがあり、そのループ内に、並列ループから返された値に固有のデータを保持するデータセットがあります。

    Parallel.For(0, uSet.Tables[0].Rows.Count, new ParallelOptions { MaxDegreeOfParallelism = val.MaxSubIterations() }, br =>
        {
            List<DataSet> MstWiseData = bll.GetUIDTable(uSet.Tables[0].Rows[0]["UID"].ToString());
            //Long Process Starts
        });//Uid Parallel

私の質問は、MstWiseData変数が各ループでクリアされるか、それともループが完了するまでその中のデータが保持され、別の並列ループのために同じ変数の別のインスタンスが作成されるか、つまり、スレッド x のループには 2 つのデータセットがありますスレッド y の変数とループには 4 つのデータセットがあります。ループ x の変数はループ y によって置き換えられますか?

その変数を使用して、長いプロセスが完了したら破棄する必要があるためです。

4

3 に答える 3

2

シナリオでは、並列 For ループによって作成される個別のタスクごとに取得される Thread-Local 変数を使用しています。

詳細については、http://msdn.microsoft.com/en-us/library/dd460703.aspxを参照してください。

于 2013-06-11T09:54:43.837 に答える
1

ラムダ式は、匿名メソッドを記述する別の方法です。変数MstWiseDataはそのメソッドのローカル変数としてカウントされるため、すべてのループとスレッドは異なる変数を使用します。

于 2013-06-11T09:54:21.653 に答える
0

前者。ループの反復ごとに作成および解放されます。

于 2013-06-11T09:51:49.457 に答える