我正在 Azure 中使用取消 token 开发一个函数。它是一个 Http 触发器。
我在方法参数中传入取消 token 。
其长时间运行的功能。我在进程之间取消了请求,但进程继续运行,并且取消 token 不会产生影响。
Azure Functions 是否支持此功能,如果我在中间取消 Http 请求,它也应该取消其执行,但情况并非如此。
我通过一小段代码对此进行了测试
public static class LongRunningFunction
{
[FunctionName("LongRunningFunction")]
public static async Task<IActionResult> RunAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "Long")]
HttpRequest req, ILogger log, CancellationToken token)
{
try
{
await Task.Delay(10000, token);
return new OkResult();
}
catch (OperationCanceledException)
{
return new NotFoundResult();
}
catch (Exception e)
{
return new InternalServerErrorResult();
}
}
}
我使用 Postman 来执行。
我做错了什么吗?
我正在寻求以下帮助 Link
最佳答案
我知道这是一个老问题,但我找到了这个问题的答案。
在 Azure Functions 中,有 2 个取消 token 。
函数方法参数中传递的 token 是主机取消 token - 当主机即将关闭时请求取消。
另一个标记是 req.HttpContext.RequestAborted
属性。当浏览器取消请求时,它就会被取消 - 这就是您所追求的。
此外,您可以使用以下代码:
using var cancellationSource = CancellationTokenSource.CreateLinkedTokenSource(hostCancellationToken, req.HttpContext.RequestAborted);
获取当主机或请求被取消时取消的 token 。
关于c# - Azure Functions 使用带有 Http 触发器的取消 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60202259/