web-dev-qa-db-ja.com

待機可能なThread.Sleepを取得する方法は?

私は、待機/スリープパラダイムに基づいてネットワークにバインドされたアプリケーションを書いています。

接続エラーが発生する場合がありますが、私の経験では、しばらく待ってから操作を再試行するだけで済みます。

問題は、await/asyncでThread.Sleepまたは別の同様のブロック操作を使用すると、呼び出し元スレッドのすべてのアクティビティがブロックされることです。

と同じ効果を達成するためにThread.Sleep(10000)を置き換える必要があるもの

await Thread.SleepAsync(10000)

[〜#〜] update [〜#〜]

追加のスレッドを作成せずにこれを行う答えを好む

114
Arsen Zahray

新しいスレッドを開始することを示唆する他の答えは悪い考えです-それをする必要はまったくありません。 async/awaitのポイントの一部は、アプリケーションに必要なスレッド数をreduceすることです。

代わりに Task.Delay whichdoes n'tは新しいスレッドを必要とせず、この目的のために正確に設計されました:

// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);
269
Jon Skeet