2013-11-15 108 views
1

我正在尋找一種替代方法來調用Thread.Sleep,它不會阻塞線程,而是將線程返回到線程池中。這樣的事情存在嗎?替代Thread.Sleep塊

+0

「迴歸」 ............ –

回答

9

使用Task.Delay

await Task.Delay(delay); 
+0

我把這個並提出在該行出現異步方法。我在調用方法中做什麼? –

+0

Nothing,這就是調用方法和「異步等待」的方式,如果你需要調用方法還需要等待,那麼請使用await .. –

+0

@SachinKainth注意,任何非'async'代碼都將繼續運行在主線;您基本上需要將所有受影響的代碼轉換爲'async' /'await',以便在不改變執行順序的情況下運行。例如,如果你的代碼調用'SomeMethodAsync()',但是**不會**'等待'結果,那麼即使SomeMethodAsync()幾乎沒有啓動,該方法調用之後的代碼也可以被執行 –

1

如果線程返回到池中,則不會做任何更多的工作在相關的方法。使方法的下一位成爲一個單獨的方法,並創建一個調用它的Timer。

+0

或' Task.Delay'。在看到Sriram的回答後,我感覺自己像一隻老狗,現在已經忘掉了新的詭計。 –

1

您還可以使用例如定時器:

using System.Timers; 

private void Main() 
{ 
    Timer t = new Timer(); 
    t.Interval = 5000; // 5 seconds 
    t.AutoReset = false; 
    t.Elapsed += new SleepDone(TimerElapsed); 
    t.Start(); 
} 

private void SleepDone(object sender, ElapsedEventArgs e) 
{ 
    Console.WriteLine("HERE WHAT COME AFTER SLEEP"); 
} 
+1

爲什麼'AutoReset = true'? –

+0

感謝@SriramSakthivel +1爲好的提示。他需要延遲一次。 –