gpt4 book ai didi

c# - AsyncTimeout Action 过滤器有什么意义?

转载 作者:太空狗 更新时间:2023-10-30 01:00:28 24 4
gpt4 key购买 nike

为了减少 Controller 给定操作的超时时间(假设它是索引),我用 AsyncTimeout(5000) 对其进行了注释。 .
在该方法中,第一行是 await Task.Delay(10000)
我将该代码发布到 azure,保证没有 debug="true" 但即便如此,该请求仍会运行 11-13 秒...所以,在我看来,这不是应该的被使用...

那么,我应该在哪里使用这个属性呢?

详情:
使用 .net 4.7(编译和运行时)和最新的 asp.net mvc (5.2.3)

最佳答案

您应该考虑使用接受 CancellationToken 的 Task.Delay 的重载。在这种情况下,AsyncTimeout 将触发取消。您发布的代码没有使用 CancellationToken,所以如果没有它,我预计不会发生任何不同的事情。

更新 - 基于您的问题的快速演示。这应该会在大约 5 秒内抛出 TaskCanceledException,而不是等待 Task.Delay 调用 15 秒。

[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);
}
}

关于c# - AsyncTimeout Action 过滤器有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46060404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com