Azure Functions 中的“即发即忘”调用

JRu*_*Run 5 c# azure azure-functions

我在 Azure 函数中有一个长时间运行的任务,我想使用 Task.Run 在后台线程中运行该任务。我不在乎结果。

public static async Task Run(...)
{
 var taskA = await DoTaskA();     
 Task.Run(new Action(MethodB));
 ....
 // return result based on taskA
}
Run Code Online (Sandbox Code Playgroud)

这是 Azure 函数中可接受的模式吗?(这是一个HTTP触发函数)

我知道这也可以通过将消息添加到队列并让另一个函数执行此任务来完成,但我想知道在 Azure 函数的后台线程中开始运行长时间运行的任务的优缺点。

Kzr*_*tof 5

最好进行一次Azure Function运行TaskA,并在其中发布一条消息,当其中发布某些内容时,该ServiceBus消息将触发另一次Azure Function运行,因为无论如何都不需要答案。TaskBServiceBus

这是微软网站上显示的示例:

[FunctionName("FunctionB")]                    
public static void Run(
    [ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "ServiceBusConnection")] 
    string myQueueItem, 
    TraceWriter log)
{
    log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
    MethodB();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不必开始新任务。就打电话吧MethodB()

这将使您能够灵活地调整计划Azure Functions(应用程序服务与消费计划)并最大限度地降低总体成本。