有很多行。我将其分为几个列表,然后运行方法“ SpellChecker”来更正字符串中的拼写错误。接下来,我运行一种方法“ SearchKeyWordsInString”,该方法应根据某些类别中的关键字将这些字符串相关联。但是,输出不是行和类别的正确匹配。 我有一个字符串列表,我将此列表分为几个子列表,并为每个子列表运行任务。在使用拼写检查器方法启动任务之后,在继续执行此任务时,我启动了对这些行进行分类的方法时,就会出现问题。如果我不共享源代码行并执行一项任务,则不会出现这种情况。
List<string> strListExcel = null;
var excel = new Excel();
excel.OpenFileNPOI(pathAndNameFile);
excel.ReadFileNPOI(out strListExcel);
excel.CloseFileNPOI();
var stringUnderList = new List<List<string>>();
int index = 0;
int countProcess = Environment.ProcessorCount * 1;
int countStr = strListExcel.Count;
int count = countStr / countProcess;
while (true)
{
stringUnderList.Add(new List<string>());
stringUnderList[index].AddRange(strListExcel.Skip(index * count).Take(count));
index++;
if (index == countProcess + 1)
break;
}
var tasks = new List<Task<List<DataCategory>>>();
for (int i = 0; i < stringUnderList.Count; i++)
{
var localStringUnderList = stringUnderList[i];
Task<List<DataCategory>> task = Task.Run(() => Text.SpellChecker(localStringUnderList)).ContinueWith(t => Text.SearchKeyWordsInString(t.Result));
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
var dataCategoryList = new List<DataCategory>();
for (int i = 0; i < stringUnderList.Count; i++) //count task = count stringUnderList
_dataCategoryList.AddRange(tasks[i].Result);
答案 0 :(得分:2)
当其余的countStr / countProcess is
而不是0
(countStr % countProcess != 0)
时,您的代码会导致某些最后几行未得到处理。
更改
if (index == countProcess + 1)
break;
进入
if (index == countProcess + 1) {
stringUnderList[index].AddRange(strListExcel
.Skip(index * count)
.Take(countStr % countProcess));
break;
}