.Net Web API - 如何使API调用同步运行?

时间:2018-02-23 06:57:41

标签: c# .net asp.net-web-api

我正在构建自己的Web API项目。

在我的项目中,有一个动作需要很长的可执行时间(让我们说需要2到3分钟才能完成),这需要在后台运行。

当我第一次调用API时如何返回HTTP 202,然后在后台任务完成时返回另一个HTTP状态代码(200或500等...)。

这是我的代码:

[HttpPost]
//this is the API acttion
public async Task < HttpResponseMessage > PostCoinData() {
    Task.Run(() => {
        //background task to run
        //i want to return another HTTP status code when the task is completed
        return ImportCoinData();
    }).Start();

    //return HTTP 202
    return new HttpResponseMessage(HttpStatusCode.Accepted);
}

private async Task < HttpResponseMessage > ImportCoinData() {
    //get data from db using EF .NET
    List<CoinData> coinDatasInDatabase = await _context.CoinData.ToListAsync();
}

2 个答案:

答案 0 :(得分:0)

最简单的方法是创建一个轮询服务来检查请求的状态。有更复杂的方法,但可能更难实现。看看信号R

答案 1 :(得分:0)

但是,您可以使用 Fire and Forget 方法,如下所示

 ThreadPool.QueueUserWorkItem(o => YourMethod());