【发布时间】:2018-04-04 10:09:11
【问题描述】:
我正在尝试提高程序的执行速度。我使用该任务使其同时运行。以下是我的原始代码:
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) {
}
}
但是,结果不一样。怎样才能使使用任务的结果相同?
【问题讨论】:
-
您的期望和收获是什么?
-
那么现在您的
append将不再是连续的?如果getresult是导致您悲伤的原因,请查看DataFlow或简单地将结果放入ConcurrentQueue然后附加在一起。 -
任务不能保证按照它们创建的顺序完成,所以如果你将所有内容附加到同一个
StringBuilder,内容很可能会出现乱序,如果它甚至可以工作的话根本——StringBuilder不是线程安全的。 -
OP,您的代码示例准确吗?似乎你一遍又一遍地用同样的论点打电话给
GetResult()。 CompanyID 在哪里声明以及如何填充? -
什么是
GetResult(companyID)它返回什么,为什么companyID总是一样的,你介意以任何特定顺序的结果吗?stringbuilder也不是线程安全的,谁知道内部缓冲区会做什么
标签: c# concurrency task-parallel-library