AsyncTimeout操作筛选器有什么意义?

Leo*_*rdo 4 c# asp.net-mvc async-await asp.net-mvc-5

为了减少控制器的给定操作(例如索引)的超时,我使用AsyncTimeout(5000)对其进行了注释。
在该方法内部,第一行是await Task.Delay(10000)
我公开发布了该代码,以确保没有问题,debug="true"但请求仍然会持续11到13秒...因此,我认为这不是应该使用的方式...

所以,我应该在哪里使用此属性?

详细信息:
使用.net 4.7(编译和运行时)和最新版本的asp.net mvc(5.2.3)

mcb*_*wes 5

您应该考虑使用Task.Delay的重载,该重载接受CancellationToken。在这种情况下,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);
    }            
}
Run Code Online (Sandbox Code Playgroud)