2015-10-19 49 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无法处理负载,则可以将结果缓存几秒钟。但是当你还不确定它存在的时候,不要试图解决这个问题。 –