Если у меня есть такой Parallel.ForEach, использующий анонимный делегат для основного цикла ForEach:
var someState = GetSomeState();
Parallel.ForEach(MyIEnumerableSource,
() =>
{
return new DataTable();
},
(record, loopState, localDataTable) =>
{
localDataTable.Rows.Add(someState.Value, record);
return localDataTable
},
(localDataTable) =>
{
using (var bulkInsert = new SqlBulkCopy(ConnectionString))
{
bulkInsert.DestinationTableName = "My_Table";
bulkInsert.WriteToServer(localDataTable);
}
localDataTable.Dispose();
});
Как я могу превратить его в следующее, где основной цикл теперь является реальнымфункция, но статически находится в другом классе:
var someState = GetSomeState();
Parallel.ForEach(MyIEnumerableSource,
() =>
{
return new DataTable();
},
OtherClass.Process,
(localDataTable) =>
{
using (var bulkInsert = new SqlBulkCopy(ConnectionString))
{
bulkInsert.DestinationTableName = "My_Table";
bulkInsert.WriteToServer(localDataTable);
}
localDataTable.Dispose();
});
//In another class in another file
static class OtherClass
{
public static DataTable Process(MyRecordType record, ParallelLoopState loopState, DataTable localDataTable)
{
localDataTable.Rows.Add(someState.Value, record); //How to I bring over someState when it is called here?
return localDataTable
}
}
Как я могу получить доступ к тому состоянию, которое создано вне цикла for и не должно быть частью локального хранилища потока?
Я бы просто использовал переменную экземпляра, если бы эта функция не была статической и находилась в одном и том же классе, но основной цикл ForEach находится в статической функции в другом классе и будет использоваться из нескольких мест в коде, причем все со своими собственнымидругая копия someState
.
Как мне передать эту переменную состояния?