我继承了一些用 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] 删除。
我来说两句