尝试减少控制器给定操作的超时(假设它是索引)我用AsyncTimeout(5000)注释了它。
在该方法中,第一行是await Task.Delay(10000)
我将该代码发布到azure,保证没有debug="true"
,但即便如此,请求也会持续11-13秒...所以,在我看来,这不是应该如何使用...
那么,我应该在哪里使用这个属性?
详细说明:
使用.net 4.7(编译和运行时)和后期asp.net mvc(5.2.3)
答案 0 :(得分:4)
您应该使用接受CancellationToken的Task.Delay的重载。在这种情况下,AsyncTimeout将触发取消。您发布的代码未使用CancellationToken,因此如果没有它,我不会发生任何不同的事情。
更新 - 快速演示基于您的问题。这应该在大约5秒内抛出TaskCanceledException,而不是等待15秒的Task.Delay调用。
[AsyncTimeout(5000)]
public async Task<ActionResult> Index(CancellationToken cancellationToken)
{
Stopwatch cancellationTimer = Stopwatch.StartNew();
try
{
await Task.Delay(15000, cancellationToken);
cancellationTimer.Stop();
return View();
}
catch (Exception e)
{
cancellationTimer.Stop();
Debug.WriteLine($"Elapsed Time {cancellationTimer.ElapsedMilliseconds}");
throw (e);
}
}