gpt4 book ai didi

c# - Azure函数HTTP触发器不取消请求

转载 作者:行者123 更新时间:2023-12-03 20:42:20 24 4
gpt4 key购买 nike

当我取消从浏览器到 HTTP 触发器的请求时,它不会取消,而是在 Azure 上托管时继续执行。

我的函数示例:

[FunctionName("Test")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
CancellationToken cancellationToken,
ILogger log)
{
var allCancellationTokens = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, req.HttpContext.RequestAborted);

await Task.Delay(30000, allCancellationTokens.Token);

if (allCancellationTokens.IsCancellationRequested) {
log.LogInformation("Request was cancelled!");
return new StatusCodeResult(499);
}

return new OkObjectResult("Complete");
}

我一直在通过 Postman 和 axios 取消 token 测试取消。当我在本地运行项目并取消它时,它可以工作,但一旦发布到 azure ,它似乎就不会取消。

我的预期结果是,如果我在 await Task.Delay(30000, allCancellationTokens.Token); 期间取消请求,它会抛出 OperationCanceledException 但是在检查日志时在Azure Functions上,似乎只是进行执行并完成功能。

重现步骤:

  1. 创建一个与上面定义的类似的 HTTP 触发器。
  2. 将应用发布到 Azure。
  3. 在 Azure 上的监视器部分中打开函数日志。
  4. 使用 Postman 向此函数发送请求并取消请求(在 30 秒的超时时间内)。
  5. 不会取消请求,仍会执行。

最佳答案

CancellationToken 有助于在操作系统通知出现问题而终止 Functions 运行时主机时实现正常关闭,请参阅以下答案了解更多信息:https://stackoverflow.com/a/63439515/528779

关于c# - Azure函数HTTP触发器不取消请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66619490/

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