c# - Azure Functions 使用带有 Http 触发器的取消 token

标签 c# multithreading azure azure-functions cancellation-token

我正在 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/

相关文章:

c# - 如何处理 U-SQL EXTRACT 语句中丢失的文件?

java - 每1小时间隔将Servlet发布请求存储在文件中一分钟

c# - Lock 语句如何确定授予对象访问权限的顺序?

c# - Excel "External table is not in the expected format."

c# - 在 session 中存储散列密码是不可取的吗?

c - Linux 调度 : OS vs "virtual"

azure - 如何从 Azure 数据工厂 V2 在 ADLA 中执行 U-SQL 存储过程

azure - 为 Azure Functions 启用 Swagger(OpenAPI 2.0 元数据)

C# - 检测混淆器

c# - .NET MVC 4 - foreach 循环中的按钮操作