gpt4 book ai didi

entity-framework - 具有 Entity Framework 作业并行性的 Azure WebJobs

转载 作者:行者123 更新时间:2023-12-03 00:14:00 27 4
gpt4 key购买 nike

我有一个与我的 MVC azure Web 应用程序一起部署的 Azure Webjob。该作业有两个队列触发函数,一个函数获取 PDF 文件并将其分解为各个页面图像,另一个函数处理各个页面。我在网站和 webjob 中都使用 EF 6 和 Unity。

使用 IJobActivator 选项,我可以毫无问题地将 DbContext 和 UoW/Services/Repositories 注入(inject)到 webjob 中。当我尝试并行运行网络作业时,问题似乎出现了。如果我将 webjob 配置选项设置为 config.Queues.BatchSize = 1,一切都很好 - 但速度很慢(串行,一次一页)。如果我将 BatchSize 提高到 1 以上,则会出现“在上一个异步操作完成之前在此上下文上启动的第二个操作”这样的错误。由于注入(inject)了 DbContext,我尝试弄乱 LifetimeManager 选项以查看这是否是问题所在 - 没有任何变化。该错误表明我需要确保所有 EF 调用都使用“await”(异步),但它们是......所以这似乎不是问题。

如果我不能并行运行网络作业,它的实用性将被严重削弱。有什么想法吗?我在 webjob 中放弃 EF 和 DbContext 并使用 ADO.Net 直接访问数据库会更好吗?

最佳答案

错误消息很清楚,您不能同时对同一个 DbContext 执行多个未完成的异步操作。由于您肯定希望保持作业并行性(即不要将 BatchSize 设置为 1),因此您可能应该为每个作业函数调用使用一个新的 DbContext。 DbContext 是轻量级的,因此这对您来说不应该是问题。

也是官方DbContext documentation提供了有关在 Web 应用程序中管理 DbContext 实例的以下指南:“使用 Web 应用程序时,每个请求使用一个上下文实例。”该指南适用于您的 WebJob 案例。

关于entity-framework - 具有 Entity Framework 作业并行性的 Azure WebJobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com