不等待 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 的“请求范围”资源——这些资源会在请求完成后被处理吗?

斯蒂芬·克利里

这是从 ASP.NET 请求提前返回的“穷人”方式。又名“火而忘记”。有更好的解决方案可用

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

那么,如果其中任何一个的失败了,你永远不会知道。

既然请求已经完成,这些调用会被中止吗?

不必要。它们可能会一直运行到完成,也可能会被中止。ASP.NET 不会仅仅因为请求完成就中止它们,但是每当 IIS 决定回收 AppDomain/进程(它偶尔会这样做)时,它就会中止它们。

可能存在使用 Autofac 的“请求范围”资源——这些资源会在请求完成后被处理吗?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章