Это может быть натяжкой, но я просто думаю здесь. В лучшем случае другой взгляд на проблему, в худшем - отрицательный голос. (
Вы могли бы сначала разделить значения для работы, как:
public Dictionary<string, List<int>> CreateDictionary()
{
var rtnValue = new Dictionary<string, List<int>>()
{
{ "0", new List<int>() },
{ "1", new List<int>() },
{ "2", new List<int>() },
{ "3", new List<int>() }
};
var rando = new Random();
for (int i = 0; i < 100; i++)
{
if (i < 25)
rtnValue["0"].Add(rando.Next(-100, 100));
if (i > 24 && i < 50)
rtnValue["1"].Add(rando.Next(-100, 100));
if (i > 49 && i < 75)
rtnValue["2"].Add(rando.Next(-100, 100));
if (i > 74 && i < 100)
rtnValue["3"].Add(rando.Next(-100, 100));
}
return rtnValue;
}
Теперь у нас есть метод, который делает эту работу.
public static string processList(IList<int> param)
{
return string.Join(", ", param);
}
И, наконец, выполняйте работу параллельно, как:
public void runInParallel()
{
var DataToOperateOn = CreateDictionary();
Parallel.For(0, DataToOperateOn.Count, i =>
{
processList(DataToOperateOn[i.ToString()]);
});
}
В качестве альтернативы, вы можете выполнить то же самое с Parallel.Invoke, например:
public void runInParallel()
{
var DataToOperateOn = CreateDictionary();
Parallel.Invoke(
() => { processList(DataToOperateOn["0"]); },
() => { processList(DataToOperateOn["1"]); },
() => { processList(DataToOperateOn["2"]); },
() => { processList(DataToOperateOn["3"]); });
}