DataFlowExecutionOptions で MaxDegreeOfParallelization を > 1 に指定すると、アクションを実行する各タスクが独自のスレッド ローカル データを持つように、スレッド ローカル データを ActionBlock に渡す良い方法はありますか?
これは、おそらく私がやりたいことを明確にする私のコードの一部です:
var options = new ExecutionDataflowBlockOptions()
{
MaxDegreeOfParallelism = 12
};
ActionBlock<int> actionBlock = new ActionBlock<int>(PerformAction, options);
List<int> resultsList = new List<int>();
void PerformAction(int i)
{
// do some work
// add them to resultsList
// i want to make sure that each thread that executes this method has its
// own copy of resultsList
}
ActionBlock が、私が提供するスレッド ローカルの init 関数を呼び出せるようにしたいと考えています。このようなもの:
new ActionBlock<int>(PerformAction, options, () => new List<int>());
そして、スレッド ローカル データを Action 関数に渡します。
void PerformAction(int i, List<int> localUserData) {...}