ホームに戻る
関連 :
目次 :
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() は遅延処理の終了後に実行される。
即ち遅延中に行える処理と、遅延後に行う処理を振り分けることができる。