Use*_*rol 2 .net multithreading azure azure-functions azure-functions-runtime
我正在尝试转向无服务器的东西,但我发现自己不明白如何移植我现有的后端代码。我需要澄清以下假设:
static与常规应用服务相比,会员的开销是多少?基本上,我们对AppDomain寿命有任何保证吗?是否可以设置一个 DI 容器,以便将我的依赖项注入到Run方法中?类似的东西:
[FunctionName("ServiceBusQueueTriggerCSharp")]
public async Task RunAsync(
[ServiceBusTrigger("myqueue", AccessRights.Manage, Connection = "meconn")]
string myQueueItem,
IBusinessLogicService blService,
ILogService logService,
IMailingService mailService) {
}
Run Code Online (Sandbox Code Playgroud)是否有可能获得CancellationTokeninRun方法以便我可以优雅地取消/关闭?
这取决于您所说的“单线程代码”是什么意思。在较高级别上,您应该查看在函数中编写的代码,类似于在 ASP.NET MVC 控制器方法中编写代码的方式。发生了单个事件(例如 HTTP 请求),运行您的应用程序的特定机器收到了该事件,您的代码描述了如何处理它。Azure Functions 的动态缩放功能永远不会进行一次执行,并将该执行透明地分配到多个线程或机器上。如果您有一个场景,必须基于单个事件完成大量工作,那么您应该将您的工作拆分为多个功能,以便系统可以扩展它。最简单的方法之一是使用队列。
有许多使用 TPL 的场景是有效的。例如,您的函数可能会从 3 个不同的数据源中提取数据并将其合并为一个结果。在这种情况下,并行启动这 3 个异步操作是有意义的。关于 PLINQ,我不太确定。我想说的是,当您出于效率目的需要并行进行大量计算时,最好将这些计算拆分为单独的函数执行(例如,使用我上面提到的队列)。
您可以使用基本上没有开销的静态变量,但不能保证应用程序域的生命周期。因此,您需要准备好在需要时重新初始化这些变量。
Azure Functions 当前不公开每个函数的内存使用统计信息。有函数应用级别的使用统计信息,请参阅此处了解信息。
Azure Functions 目前不支持 DI。
是的,只需将您的函数定义为一个异步函数,该函数返回一个 Task 并让它接受一个取消令牌,一个将被传递给您。
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |