使用 Azure Batch,我的项目使用带有函数和队列的基于事件的设计将作业添加到池中。当作业完成时,即使所有任务都已完成,它仍然是“活动的”。
在计时器上触发(单个使用应用程序服务计划)功能,该计时器从队列中读取 X 数量的消息。功能:
- 创建一个池(如果不存在)
- 创造就业机会
- 将任务添加到该作业
效果很好。但是,一旦任务完成,即使所有任务都已完成,作业状态仍保持活动状态。我希望作业终止/清理/将状态设置为“已完成”。
我希望我的函数是短暂的,并且不希望有任何状态。所以我没有使用foreach (CloudTask task in job.CompletedTasks())
等待任务的状态。
另一种方法是使用任务依赖关系,这需要batchClient.Utilities.CreateTaskStateMonitor()
因此是一种有状态的方法。
在基于事件的设计中使用 Azure Batch 的最佳方式是什么?具体来说,任务完成后如何终止/清理作业?
一旦作业下的所有任务完成,您就可以让作业“自动完成”。有一个属性叫所有任务完成时在 CloudJob 对象上。
您首先需要设置这个property to NoAction
(默认),当您向作业添加任务时。将所有任务添加到作业后,您可以将该值更新为TerminateJob
然后打电话Commit()/CommitAsync()
。请注意,如果您保留最初提交的 CloudJob,则需要Refresh()/RefreshAsync()
首先在修改属性并提交之前。或者你也可以GetJob()/GetJobAsync()
,修改,然后提交。
对于基于事件的设计,您可以查看启用批量服务分析看看这是否适合您的场景。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)