【问题标题】:Query running windows workflows in c#在 C# 中查询正在运行的 Windows 工作流
【发布时间】:2014-09-30 13:11:48
【问题描述】:

我有一个计划的作业(在 asp.net 中),它使用 WorkflowApplication 及其 Run 方法创建并运行多个工作流。由于 Run 是一个异步方法,因此在他们自己的工作流线程中启动工作流后,作业会快速返回,这很棒!

但是,我不希望作业在所有之前的工作流完成(或失败)之前创建和运行新的工作流。因此,我的问题是,有没有办法查询工作流运行时以运行工作流?

我没有使用与我的工作流相关的持久存储,因为它们不需要持久化。

补充: 启动工作流的(Web)线程(Web 作业)将在工作流完成之前结束其工作。几分钟后,一个新的作业线程再次启动,该线程需要知道前一个线程启动的工作流的状态。如果我将跟踪数据(使用跟踪扩展)写入数据库,我相信 2.nd 线程可以查询它,但我宁愿避免使用数据库。有没有办法询问工作流运行时是空闲还是活动?

【问题讨论】:

  • 我已经通过 Completed 或 Idled 回调使用 Set() 使用 AutoResetEvent(任何类型的 Mutex 类线程同步器工作)阻塞调用线程来完成此操作。或者,当然,您可以只使用同步运行的msdn.microsoft.com/en-us/library/dd465567(v=vs.110).aspx。取决于你的要求。

标签: c# asp.net workflow workflow-foundation-4


【解决方案1】:

您使用工作流跟踪扩展程序。这报告了工作流的状态。这是一个推送系统,因此您无需查询工作流程,而是使用 TrackingParticipant 在检测到您正在寻找的状态时向您的主线程发出信号。

http://msdn.microsoft.com/en-us/library/ee513992(v=vs.110).aspx

【讨论】:

  • 感谢您的回答。请查看我更新的问题。
  • 关于您对问题的补充,我不知道一种实时查询工作流程的方法。您可以使用内存中的数据结构来保存跟踪信息,但它很容易受到断电或应用程序关闭的影响。我通常将数据放入 MongoDB 或 mySQL 等小型数据库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多