没有等待web api请求中的任务

时间:2017-07-21 13:13:33

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

我继承了一些用web api编写的代码,我不确定我100%理解。它看起来与此相似:

public async Task<IHttpActionResult> GetAll()
{
    var items = await repo.GetItems();

    Task.Run(async () =>
    {
        await MakeCallToExternalServiceAsync();

        await MakeCallToAnotherExternalServiceAsync();
    });

    return Ok(items);
}

在调用存储库以从数据存储中获取一些数据之后,代码会触发任务以对某些外部服务进行一些调用。假设这些呼叫都没有失败,那还有其他问题吗?由于请求已完成,这些调用是否会中止?使用Autofac可能存在“请求范围”的资源 - 这些资源会在请求完成后被处理掉吗?

1 个答案:

答案 0 :(得分:3)

这是&#34;穷人&#34;从ASP.NET请求提前返回的方法。又名&#34;开火,忘记&#34;。 There are much better solutions available

  

假设这些调用都没有失败,那还有其他问题吗?

好吧,如果其中任何一个失败,你就永远不会知道。

  

由于请求已完成,这些调用是否会中止?

不一定。它们可能会运行完成,或者它们可能会中止。 ASP.NET不会因为请求完成而中止它们,但只要IIS决定回收AppDomain /进程(它偶尔会这样做),IIS就会中止它们。

  

可能有资源是&#34;请求范围&#34;使用Autofac - 请求已经完成后会被处理掉吗?

是。请求完成后,使用任何请求范围的资源都不是一个好主意。