2015-10-19 50 views
0

我試圖實現一個涉及等待任務在ASP.NET(C#)中完成的工作流。實現按時間間隔調用的異步任務

「任務」實際上是一個數據庫中的一些元數據,它在完成時被更新。 「偵聽器應用程序」將會是一個應用程序,持續詢問該任務是否已完成。我這樣做的原因是爲了避免在2個WEB API之間保持開放的連接,以節省時間。

我的問題是哪個是最好的解決方案呢?

我目前的執行情況:

bool isDone = false; 
while (isDone == false) 
{ 
    await Task.Delay(5000); 

    //check if task is done 
    //if it is done, the flow will exit this "while" code block 
} 

上實現時,我放棄,因爲,據我所知,塊不必要的線程:

bool isDone = false; 
while (isDone == false) 
{ 
    System.Threading.Thread.Sleep(5000); 

    //check if task is done 
    //if it is done, the flow will exit this "while" code block 
} 

是我目前的執行是否正確?它會阻止當前線程嗎? (我想避免)

+1

一般情況下,如果你不想等待更長的函數執行,你可以創建不同部分的函數,將其稱爲異步方式並定義回調方法 –

回答

1

Task.Delay內部使用計時器。它不會阻塞線程。

+0

如果我有很多線程同時執行約120通過「WHILE」塊將我有一個Web Api的問題? –

+1

@PrisecaruAlin嘗試一下,找出自己。 – Servy

+1

@PrisecaruAlin很難說沒有嘗試過。如果您的web api無法處理負載,則可以將結果緩存幾秒鐘。但是當你還不確定它存在的時候,不要試圖解決這個問題。 –