当我在Azure上托管时,从浏览器向HTTP触发器发送请求后,取消请求不起作用,函数将继续执行。
我的函数示例:
[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的取消令牌进行取消测试。
当我在本地运行项目并取消它时,它会工作正常,但是似乎发布到Azure后就无法取消。
我的预期结果是,在执行await Task.Delay(30000, allCancellationTokens.Token);
期间,如果我取消请求,它应该抛出OperationCanceledException
。但是,在检查Azure Functions的日志时,似乎只是继续执行并完成函数。
复现步骤:
- 创建像上面定义的HTTP触发器。
- 将应用程序发布到Azure。
- 在监视部分中打开Azure函数日志。
- 使用Postman向此函数发送请求并取消请求(在超时时间30秒内)。
- 不会取消请求,仍然会执行。
allCancellationTokens.Token.ThrowIfCancellationRequested
。这样做会取消你的函数吗? - Peter Csala