如何按需取消特定的Azure函数实例?

问题描述 投票:0回答:1

我有一个由多个任务组成的工作流程,其中每个任务都由 Azure 函数执行。这些功能由消息总线中的消息触发。 例如:

这是我的 azure 函数的示例源代码:

[Function(nameof(ProcessActivityRequest))]
    public async Task ProcessActivityRequest(
        [ServiceBusTrigger("QueueNameServicesBus", 
            Connection = "ServiceBus:ConnectionString")] ServiceBusReceivedMessage receivedMessage, FunctionContext context, CancellationToken cancellationToken)
    {
        try
        {
            var invocationId = context.InvocationId;
            await AcitivityManager.Process(receivedMessage)
        }
        catch (Exception e)
        {
           _logger.LogError(e, e.Message);
        }
    }

当用户取消工作流时,我想确保所有关联的 Azure Function 实例也被取消。例如,考虑这样一种场景,其中我有一个名为

ProcessActivityRequest
:

的 Azure 函数
  • 工作流程 A 启动时,它会启动
    ProcessActivityRequest
    的一个实例(我们称之为“流程 1”)。
  • 当工作流程 B 启动时,它会触发另外两个
    ProcessActivityRequest
    实例(名为“进程 2”和“进程 3”)。
  • 如果用户取消工作流程B,如果“流程2”和“流程3”尚未完成,我需要取消它们,而“流程1”应该继续运行而不会中断。

我对此进行了研究,似乎没有直接的方法可以取消由服务总线触发的 Azure Function 的运行进程,除了关闭 Azure Function 主机,如此讨论中所述。

还有其他人遇到过这个问题吗?如果是这样,您找到解决方法了吗?

编辑:

包含 4 个任务的工作流程示例(使用 Elsa 工作流程Workflow 4 task 取消工作流程: Cancel workflow

.net azure-functions workflow
1个回答
0
投票

一个想法可能是稍微重构您的代码以使用耐用功能代替。您将在用户启动工作流时启动协调器,从协调器启动所有子实例,并根据需要取消工作流通过终止所有子实例

© www.soinside.com 2019 - 2024. All rights reserved.