Azure Functions 上 .NET 的独立工作器模型与进程内模型之间的差异

.NET 函数有两个执行模型:

执行模型 说明
进程内 函数代码与 Functions 宿主进程在同一进程中运行。 请在开始之前,查看 .NET 支持的版本。 若要了解详细信息,请参阅使用 Azure Functions 开发 C# 类库函数
隔离进程 函数代码在单独的 .NET 工作进程中运行。 请在开始之前,查看 .NET 支持的版本。 有关详细信息,请参阅在 C# 中开发隔离进程函数

本文描述了两个模型之间的功能和行为差异的现状。 若要从进程内模型迁移到独立辅助角色模型,请参阅将 .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 应用服务公告

后续步骤