我继承了一些用web api编写的代码,我不确定我100%理解。它看起来与此相似:
public async Task<IHttpActionResult> GetAll()
{
var items = await repo.GetItems();
Task.Run(async () =>
{
await MakeCallToExternalServiceAsync();
await MakeCallToAnotherExternalServiceAsync();
});
return Ok(items);
}
在调用存储库以从数据存储中获取一些数据之后,代码会触发任务以对某些外部服务进行一些调用。假设这些呼叫都没有失败,那还有其他问题吗?由于请求已完成,这些调用是否会中止?使用Autofac可能存在“请求范围”的资源 - 这些资源会在请求完成后被处理掉吗?
答案 0 :(得分:3)
这是&#34;穷人&#34;从ASP.NET请求提前返回的方法。又名&#34;开火,忘记&#34;。 There are much better solutions available
假设这些调用都没有失败,那还有其他问题吗?
好吧,如果其中任何一个做失败,你就永远不会知道。
由于请求已完成,这些调用是否会中止?
不一定。它们可能会运行完成,或者它们可能会中止。 ASP.NET不会因为请求完成而中止它们,但只要IIS决定回收AppDomain /进程(它偶尔会这样做),IIS就会中止它们。
可能有资源是&#34;请求范围&#34;使用Autofac - 请求已经完成后会被处理掉吗?
是。请求完成后,使用任何请求范围的资源都不是一个好主意。