按类别的行的混沌分布

时间:2019-06-14 12:36:49

标签: c# task

有很多行。我将其分为几个列表,然后运行方法“ 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);

1 个答案:

答案 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;
}