C# 实现按时间间隔调用的异步任务

C# 实现按时间间隔调用的异步任务,c#,asp.net,asp.net-mvc-4,asynchronous,thread-safety,C#,Asp.net,Asp.net Mvc 4,Asynchronous,Thread Safety,我正在尝试实现一个工作流,其中包括在ASP.NET(C#)中等待任务完成 “任务”实际上是数据库中的一些元数据,在任务完成时更新。“侦听器应用程序”将是一个不断询问该任务以查看其是否已完成的应用程序。我这样做的原因是为了避免在两个WEB API之间保持开放连接以进行耗时的操作 我的问题是,哪一个是最好的解决方案 我目前的执行情况: bool isDone = false; while (isDone == false) { await Task.Delay(5000); //c

我正在尝试实现一个工作流,其中包括在ASP.NET(C#)中等待任务完成

“任务”实际上是数据库中的一些元数据,在任务完成时更新。“侦听器应用程序”将是一个不断询问该任务以查看其是否已完成的应用程序。我这样做的原因是为了避免在两个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
}

我当前的实现正确吗?它是否阻止当前线程?(我想避免)

任务。延迟在内部使用计时器。它不会阻止线程。

如果我有多个线程同时执行该操作,大约有120次通过“WHILE”块,我的Web Api会有问题吗?@PrisecaruAlin自己试试看。@PrisecaruAlin不试试很难说。如果您的web api无法处理加载,则可以将结果缓存几秒钟。但是,当你还不确定这个问题是否存在时,不要试图解决它。@PrisecaruAlin不要忘记仍然存在请求超时-在某个时候,请求可能会被终止(取决于你的实现)。@Luaan,这正是我选择此实现的原因。最初,我有一个简单的wait-HttpClient-POST或GET-async-API,处理过程可能需要15分钟。请求最终超时。有了这个新的实现,我不会在两个应用程序之间保持开放连接,希望不会超时。一般来说,如果你不想等待更长的函数执行,你可以创建不同部分的函数,以异步方式调用它并定义回调方法