ホームに戻る
関連 :
Taskの開始と終了待ち
目次 :

Task.Delay() とは

指定された時間(ミリ秒)分の遅延を発生させる処理。即ち指定時間分「何もせずに待つ」(≒NOP)。
かつては同様の目的で Thread.Sleep() が用いられていたが、これは呼び元に処理を戻さず、ブロックしてしまう欠点があった。
Task.Delay() は呼び元をブロックせずに用いることができるため、現在はこちらが推奨されている。

基本的な使い方

async void Hoge() { : // Task.Delay() を別タスクで開始し、終了を待つ // ⇒ 300ms の遅延を発生させる await Task.Delay(300); // この行以降は Task.Delay() の終了後に実行される Fuga(); : }
上記コード例のように、Task.Delay() を await するのが一般的。
これは遅延処理を別タスクで開始し、即座に呼び元 (Hoge()) に処理を戻している。
後続行は別タスクの完了後に実行されるため、結果として Task.Delay() の開始から300ms後に実行されることになる。

応用

async void Hoge() { : // 遅延タスクの開始 Task t = Task.Delay(300); // この行は遅延タスク開始後すぐに実行される Fuga(); // 遅延タスクの終了を非同期的に待機 await t; // この行以降は遅延タスク終了後でないと実行されない Puyo(); : }
遅延タスクの作成と、終了待ちを別処理とするパターン。
遅延処理と並行して Fuga() が実行され、Puyo() は遅延処理の終了後に実行される。
即ち遅延中に行える処理と、遅延後に行う処理を振り分けることができる。