有没有一种将线程本地数据传递到 ActionBlock 的好方法,这样如果您在其 DataFlowExecutionOptions 中指定 MaxDegreeOfParallelization 为 > 1,那么执行该操作的每个任务都会有自己的线程本地数据?
这是我的一些代码,可能会阐明我想要做什么:
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 调用我提供的线程本地初始化函数。像这样的东西:
new ActionBlock<int>(PerformAction, options, () => new List<int>());
并让它将我的线程本地数据传递给我的 Action 函数:
void PerformAction(int i, List<int> localUserData) {...}