2012-04-22 24 views
3

Action<string, int, double, double>の配列を定義し、Parallel.Invoke()を使用してパラレルで実行したいとします。アクションをパラメーターレスアクションにキャストして、私がこれを行うことができるようにする方法はありますか、それとも別の方法がありますか?Parallel.Invokeを使用してパラメータを使用してメソッドを実行

+0

言語タグを追加することをおすすめします。 –

答えて

5

あなたはこれを試みることができる:

Parallel.Invoke(() => 
    { 
     YourFirstAction(param1, param2, param3, param4); 
    }, // close first Action 
    () => 
    { 
     YourSecondAction(param1, param2, param3, param4); 
    }//close second Action 
); //close parallel.invoke 
0

私はあなたがパラメータ値を送信せずにそれらを実行して大丈夫ならアクションはパラメータを持っている理由として困惑しています。それはおそらくデフォルト値でParallel.ForEachを使用するのがベストだろう:

Action<string, int, double, double>[] actions; 

// Action array, actions, set somewhere in code. 

Parallel.ForEach(actions, action => action(string.Empty, 0, 0, 0)); 

あなたが合うように値を置き換え、その後のパラメータを送信する場合。

私は私のテストのために、次のアクションを使用:秒の長さ20の配列のための

Parallel.For(0, actions.Length, index => actions[index] = (s, i, d1, d2) => Thread.Sleep(100)); 
Parallel.For(0, parameterless.Length, index => parameterless[index] =() => Thread.Sleep(100)); 

結果:

Parallel.Invoke:0.3000709

Parallel.ForEach:0.3022143

正規のforループ:2.0000706

したがって、Parallel.Invokeにはパラメータのないアクションを使用する利点がありますが、パフォーマンスにはわずかな影響しか及ぼしませんが、あまり効果はありません。

私はParallel.ForEachを使用してパラメータのないアクション配列をテストしましたが、結果はParallel.Invokeとほぼ同じで、結果は0.300979秒でした。

+0

なぜこれがダウンリストされていますか?これは実際に彼の問題に対する答えかもしれません... –

関連する問題