我需要为符号列表运行单个进程。所以我有一个符号列表,如 AAPL、FB、QQQ、MSFT、IBM,我还有一个函数,其中包含给定符号的计算逻辑。所以执行我的这个逻辑我正在使用任务。
List<string> symbolList = new List<string>() {"AAPL","QQQ","FB","MSFT","IBM"};
Task[] taskArray = new Task[symbolList.Count];
for(int i=0; i<taskArray.Length; i++)
{
taskArray[i] = Task.Factory.StartNew(() =>
{
criteriaEvalution.Evaluate(finalArray, false, new List<parseObj>(), ref builder, symbolList.IndexOf(i));
});
}
Task.WaitAll(taskArray);
因此,当我运行此代码时,它会向我显示错误,例如
指数超出范围。必须是非负的并且小于集合的大小。
在线显示错误:
criteriaEvalution.Evaluate(finalArray, false, new List<parseObj>(), ref builder, symbolList.IndexOf(i));
我要将符号名称传递给函数。
那么请问我可以为此找到解决方案吗?我已经在谷歌上检查过它说索引超出范围。我已经通过设置调试器检查过,但我不明白如何检查它的任务区域。
Parallel.Foreach
可以做到这一点。这里有一个例子如何:
public static void DoIt(string a)
{
Console.WriteLine(a);
}
public static void Main(string[] args)
{
List<string> symbolList = new List<string>() { "AAPL", "QQQ", "FB", "MSFT", "IBM" };
Parallel.ForEach(symbolList, a => DoIt(a));
}
您可以使用ParallelOptions
以下命令控制呼叫:
ParallelOptions options = new ParallelOptions() { MaxDegreeOfParallelism = 10 };
Parallel.ForEach(symbolList, options, a => DoIt(a));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句