72
我正在寫一個基於await/sleep範例的網絡綁定應用程序。如何獲得可等待的Thread.Sleep?
有時會發生連接錯誤,根據我的經驗,等待一段時間並再次重試操作會付出代價。
問題是,如果我在等待/異步中使用Thread.Sleep或某些類似的阻塞操作,它會阻止調用者線程中的所有活動。
我應該將其替換了Thread.Sleep(10000),以作爲acheave
await Thread.SleepAsync(10000)
同樣的效果?
UPDATE
,我會更喜歡哪做到這一點不會造成任何額外的線程
我還是會來與A4.5東西交手。該聲明之後的代碼執行分支在哪裏?非睡眠/阻塞部分執行它還是等待的'線程'?主要的非阻塞執行是否會將該塊留在後面(又名返回)? – kenny
是的。這完全是我需要的 –
@kenny:您可能會發現我的['async' intro](http://nitoprograms.blogspot.com/2012/02/async-and-await.html)有幫助。當'Task.Delay'返回的awaitable等待時,由於它沒有完成,當前的方法返回一個不完整的任務。稍後,當'Delay'完成時(關閉計時器,而不是線程),該方法的其餘部分計劃運行。延續運行在一個「上下文」中,可以*返回到同一原始線程 - 我的博客上的詳細信息。 –