Azure Functions 上 .NET 的独立工作器模型与进程内模型之间的差异
.NET 函数有两个执行模型:
执行模型 | 说明 |
---|---|
进程内 | 函数代码与 Functions 宿主进程在同一进程中运行。 请在开始之前,查看 .NET 支持的版本。 若要了解详细信息,请参阅使用 Azure Functions 开发 C# 类库函数。 |
隔离进程 | 函数代码在单独的 .NET 工作进程中运行。 请在开始之前,查看 .NET 支持的版本。 有关详细信息,请参阅在 C# 中开发隔离进程函数。 |
重要
对进程内模型的支持将于 2026 年 11 月 10 日结束。 为获得完全支持,强烈建议将应用迁移到独立工作模型。
本文描述了两个模型之间的功能和行为差异的现状。 若要从进程内模型迁移到独立辅助角色模型,请参阅将 .NET 应用从进程内模型迁移到独立辅助角色模型。
执行模式比较表
使用下表比较两个模型之间的特征和功能差异:
功能/行为 | 独立工作模型 | 进程内模型3 |
---|---|---|
支持的 .NET 版本 | 长期支持 (LTS) 版本, 标准期限支持 (STS) 版本, .NET Framework |
长期支持 (LTS) 版本,以 .NET 8 结束 |
核心包 | Microsoft.Azure.Functions.Worker Microsoft.Azure.Functions.Worker.Sdk |
Microsoft.NET.Sdk.Functions |
绑定扩展包 | Microsoft.Azure.Functions.Worker.Extensions.* | Microsoft.Azure.WebJobs.Extensions.* |
Durable Functions | 支持 | 支持 |
绑定公开的模型类型 | 简单类型 JSON 可序列化类型 数组/枚举 服务 SDK 类型 4 |
简单类型 JSON 可序列化类型 数组/枚举 服务 SDK 类型 4 |
HTTP 触发器模型类型 | HttpRequestData / HttpResponseData HttpRequest / IActionResult(使用 ASP.NET Core 集成)5 |
HttpRequest / IActionResult5 HttpRequestMessage / HttpResponseMessage |
输出绑定交互 | 返回扩展模型中的值以及: - 一个或多个输出 - 输出数组 |
返回值(仅单个输出),out 参数,IAsyncCollector |
命令性绑定1 | 不受支持 - 改为直接使用 SDK 类型 | 支持 |
依赖关系注入 | 受支持(改进的模型与 .NET 生态系统一致) | 支持 |
中间件 | 支持 | 不支持 |
日志记录 | 从 FunctionContext (或通过依赖项注入)获取的 ILogger<T> /ILogger |
传递给函数的 ILogger 通过依赖项注入的 ILogger<T> |
Application Insights 依赖项 | 支持 | 支持 |
取消令牌 | 支持 | 支持 |
冷启动时间2 | 可配置优化 | 已优化 |
ReadyToRun | 支持 | 支持 |
[弹性消耗] | 支持 | 不支持 |
1如果需要使用在运行时确定的参数与服务交互,建议直接使用相应的服务 SDK,而不是使用命令性绑定。 SDK 不太详细,涵盖更多方案,并且在错误处理和调试方面具有优势。 此建议适用于这两种模型。
2 使用 .NET 的某些预览版本时,由于预览框架的实时加载,Windows 上的冷启动时间可能会受到额外影响。 这种影响适用于进程内和进程外模型,但如果在不同版本之间进行比较,差异可能比较明显。 Linux 计划中不存在预览版本的此延迟。
3 C# 脚本函数也在进程内运行,并使用与进程内类库函数相同的库。 有关详细信息,请参阅 Azure Functions C# 脚本 (.csx) 开发人员参考。
4 服务 SDK 类型包括 Azure SDK for .NET 中的类型,例如 BlobClient。
.NET Framework 不支持 5ASP.NET Core 类型。
6 进程内模型上尚不受支持 .NET8,但在独立工作器模型上可用。 有关 .NET 8 计划的信息,包括进程内模型的未来选项,请参阅 Azure Functions 路线图更新文章。
支持的版本
Functions 运行时版本使用特定版本的 .NET。 若要详细了解 Functions 版本,请参阅 Azure Functions 运行时版本概述。 版本支持取决于 Functions 是在进程内运行还是在进程外(独立)运行。
注意
若要了解如何更改函数应用使用的 Functions 运行时版本,请参阅查看和更新当前运行时版本。
下表显示了可与特定版本的 Functions 配合使用的 .NET Core 或 .NET Framework 的最高级别。
Functions 运行时版本 | 进程内 (.NET 类库) |
进程外 (.NET 独立) |
---|---|---|
Functions 4.x | .NET 6.0 | .NET 6.0 .NET 7.0(预览版) .NET Framework 4.8 (GA)1 |
Functions 3.x | .NET Core 3.1 | .NET 5.0 2 |
Functions 2.x | .NET Core 2.13 | 不适用 |
Functions 1.x | .NET Framework 4.8 | 不适用 |
1 生成过程还需要使用 .NET 6 SDK。 对 .NET Framework 4.8 的支持目前为正式版。
2 生成过程还需要使用 .NET Core 3.1 SDK。
3 有关详细信息,请参阅 Functions v2.x 注意事项。
有关 Azure Functions 版本的最新消息,包括删除较旧的特定次要版本,请关注 Azure 应用服务公告。