gpt4 book ai didi

c# - Azure Functions 中的孤立异步任务

转载 作者:行者123 更新时间:2023-12-03 02:19:56 24 4
gpt4 key购买 nike

如果在 Azure 函数中启动异步任务,但在完成之前孤立,会发生什么情况(从不等待),例如:

[Function("FuncAsync")]
public static async Task<HttpResponseData> FuncAsync(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "FuncAsync")]
HttpRequestData req,
FunctionContext context)
{
var obj = FactoryClass.GetObject(); // return some object with async LongTaskAsync method
obj.LongTaskAsync(); // async Task LongTaskAsync()

return req.CreateResponse(HttpStatusCode.OK);
}

这里的目的是(我猜)启动一个长时间运行的进程并立即从函数返回。

我认为这是一种不好的做法,但似乎可以在遗留代码中使用。我怀疑当没有函数入口点运行/触发时,无法保证该异步任务的生命周期,并且 azure 进程可以随机结束。

对于控制台应用程序,如果正在运行的异步任务孤立(并在进程终止时继续运行),它将被放弃/终止(并且不会引发异常)。

    class Program
{
public static async Task RunFuncAsync()
{
try
{
Console.WriteLine("Task started.");
await Task.Delay(10 * 1000);
Console.WriteLine("Task finished."); // this is never executed
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.Message); // this is never executed
}
}

static async Task MainAsync(string[] args)
{
var t = RunFuncAsync(); // no awaiting - purposefuly
await Task.Delay(5 * 1000);
Console.WriteLine("Exiting.");
}

static void Main(string[] args)
{
MainAsync(args).GetAwaiter().GetResult();
}
}

输出:

Task started.
Exiting.

C:\TestTasks_Console.exe (process 6528) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .

最佳答案

What happens if in an Azure Function an async Task is started butorphaned before it finishes ?

您对上述问题的回答是正确的,它将终止。 Azure Functions 有很多功能可以让我们的工作变得更加轻松。但是,无状态 Azure Functions 不适合需要存储进度状态的长时间运行操作。

  • 对于这种情况, Durable Functions 是最好的选择。这样,执行时间的限制就不再适用。

  • 基于任务的编程模型和异步/等待非常适合映射 Durable Functions 的工作流程。

  • 如果您检查Azure Function best practices ,您还会发现我们应该避免长时间运行的函数并且我们的函数应该是无状态的

  • 另一个选择是选择 WebJobs 。您可以使用 Azure WebJobs 在 Azure Web 应用程序中将自定义作业作为后台任务执行

总之,我们可以说,不建议将无状态 Azure Functions 用于长时间运行的操作,因为您可能会遇到超时问题,或者在您的情况下可能会被终止。

关于c# - Azure Functions 中的孤立异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69496902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com