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