タスクを非同期的に遅延させるのに問題があります。私は、数十/数十万の非同期実行スクリプトの規模で実行する必要があるアプリケーションを作成しています。私は C# アクションを使用してこれを行っていますが、特定のシーケンスの実行中に、スクリプトを適切に実行するために、外部リソースが期待される状態になるまで待機する必要がある場合があります。最初は Thread.Sleep() を使用してこれを書きましたが、それがアプリケーションのパフォーマンスの魚雷であることが判明したため、非同期スリープの async/await を調べています。しかし、実際に一時停止を待つことはできません! 誰かがこれを説明できますか?
static void Main(string[] args)
{
var sync = new List<Action>();
var async = new List<Action>();
var syncStopWatch = new Stopwatch();
sync.Add(syncStopWatch.Start);
sync.Add(() => Thread.Sleep(1000));
sync.Add(syncStopWatch.Stop);
sync.Add(() => Console.Write("Sync:\t" + syncStopWatch.ElapsedMilliseconds + "\n"));
var asyncStopWatch = new Stopwatch();
sync.Add(asyncStopWatch.Start);
sync.Add(async () => await Task.Delay(1000));
sync.Add(asyncStopWatch.Stop);
sync.Add(() => Console.Write("Async:\t" + asyncStopWatch.ElapsedMilliseconds + "\n"));
foreach (Action a in sync)
{
a.Invoke();
}
foreach (Action a in async)
{
a.Invoke();
}
}
実行結果は次のとおりです。
シンクロ:999
非同期: 2
非同期に待機させるにはどうすればよいですか?