我是否需要将Azure函数作为异步方法运行?

inkz8wg9  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(245)

问题-为什么我的Azure函数项目(隔离进程)在program.cs文件中不包含命名空间、类名或main方法?为什么Azure工具在我创建函数项目时没有生成这个函数,但仍然运行?我需要吗?

另外,Microsoft examples(底部示例)都使用异步方法,我应该让我的program.cs文件异步吗?我认为使用Azure函数会违背目的,因为每个函数都在自己的进程中运行?
我创建了一个net7.0 azure函数项目,并注意到我的program.cs文件中有如下代码,没有命名空间,程序类或main方法:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();
host.Run();

看看微软在Github上的examples,它们都有命名空间,程序类和主方法,如下所示。

namespace Function
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string sqlConnectionString = Environment.GetEnvironmentVariable("SqlConnectionString");
            var host = new HostBuilder()
                .ConfigureFunctionsWorkerDefaults()
                .ConfigureServices(s => {
                    s.AddDbContext<BloggingContext>(
                        options => options.UseSqlServer(sqlConnectionString)
                    );
                })
                .Build();

            await host.RunAsync();
        }
    }
}
biswetbf

biswetbf1#

这是一个部分的答案,希望能有所帮助。
您正在谈论的是.NET 6中引入的“顶级语句”。在顶级语句入口点中,命名空间和main方法是隐式的,如果在其中的任何地方使用await,它将以异步方式生成。
Microsoft的大多数示例都是在本介绍之前编写的,或者为了清晰起见添加了这些元素。
我不知道有谁在生产中使用真正的顶级语句(除非是web/service/di关注点的IHostBuilder),我使用它们来提取main方法,但在文件顶部包含了一个无主体的命名空间声明来澄清这一点。

namespace Function;
var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();
await host.RunAsync();

在功能上等同于:

namespace Function
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var host = new HostBuilder()
                .ConfigureFunctionsWorkerDefaults()
                .Build();
            await host.RunAsync(); 
        }
    }
}

相关问题