任务不按预期返回结果

时间:2018-04-04 01:29:47

标签: c# concurrency task-parallel-library

我正在努力提高程序的执行速度。我使用该任务使其同时运行。以下是我的原始代码:

StringBuilder expression = new StringBuilder(1024);
int count = table.Rows.Count;
for (int i = 0; i < count; i++)
{                   
        string result = GetResult(companyID);                            
        expression.Append(result);
}   

我改变了这样的事情:

StringBuilder expression = new StringBuilder(1024);
int count = table.Rows.Count;
for (int i = 0; i < count; i++)
{
   try
    {
        Task task1 = Task.Factory.StartNew(() =>
        {
            string result = GetResult(companyID);                                                        
            expression.Append(result);
        });
    }
    catch (Exception ex) {
    }
} 

然而,结果却不尽相同。如何使用任务使结果相同?

1 个答案:

答案 0 :(得分:0)

简化您的情况:

List<string> Outputs = new List<string>();

for(int i=0; i< 100; i++)
{
    Outputs.Add($"Hello World: {i}");
}

这里,Output是一个包含Hello World的字符串列表:1,2,....:

enter image description here

你的并行化方式 - 不能保证相同的顺序(因为那是什么并行化,你不能说哪个任务首先完成)。

如果您期望输出与顺序逻辑相同,但想并行执行,则可以执行以下操作:

Parallel.For(0, 100, (i) =>
{
    Outputs.Insert(i, $"Hello World: {i}");
});

注意,循环体中的代码 - 在预期的索引处插入字符串。这将创建预期的输出。