【发布时间】:2019-04-11 09:33:39
【问题描述】:
我需要为符号列表运行单个进程。所以我有一个符号列表,如 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));
我要将符号名称传递给函数的位置。
请问我可以为此找到解决方案吗? 我已经在谷歌上检查过它说索引超出范围。我已经通过设置调试器进行了检查,但我不明白如何检查任务区域。
【问题讨论】:
-
symbolList.IndexOf(i) 将始终返回 -1(我不知道您如何编写此代码而不会出现任何来自 IDE 的错误),它应该是您存储在列表中的某些内容的索引,例如symbolList.IndexOf("AAPL") 这将返回 0 和 symbolList.IndexOf("QQQ") 这将返回 1
-
如果我使用 symbolList[i] 那么它也会显示同样的错误。
-
我可以看到标准评估类的完整代码吗?
标签: c# multithreading linq parallel-processing task