次の 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
ますか?