我有以下for循环:
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
for (int i = 0; i < packets2.Count; i++)
{
dosimulationasync(packets2[i]);
}
stopwatch.Stop();
logit("Time: " + stopwatch.ElapsedMilliseconds);
dosimulationasync
是这样的:
private async Task dosimulationasync(SimulationPoint mypoint)
{
await TaskEx.Run(() =>
{
for (int i = 0; i < allobjects.Count; i++)
{
if (allobjects[i].ID == mypoint.ID)
{
allobjects[i].setvalue(mypoint);
break;
}
}
});
}
问题是第一个 for 循环,用 捕获,它stopwatch
变得非常慢,它必须处理的值越多(就像 13 个值已经花费了大约时间:300 毫秒)。我认为通过dosimulationasync
异步调用该方法,第一个 for 循环将立即继续。
我无法解释为什么它变得那么慢,即使dosimulationasync
例程很慢,它也不应该影响第一个 for 循环,对吧?
我究竟做错了什么?我怎样才能“派遣” dosimulationasync
?