0

为 Workflow Foundation (3.0/3.5) 编写长期运行的自定义活动的最佳实践表明,完全在活动的 Execute 方法中执行长期运行的任务并不是一个好主意。分配给工作流的单个线程将被阻止,从而阻止处理工作流的其他计划请求。

所以对于长时间运行的任务,应该创建一个队列。实际工作将由本地服务(在线程池线程上运行)完成。该服务通过先前的工作流队列将工作结果传递给等待活动。

所以我的问题是,究竟是什么将任务量化为长时间运行?是处理时间的问题吗?什么时候应该创建一个队列,什么时候只使用本地服务就足够了?

感谢您的任何澄清。

4

1 回答 1

1

您需要什么样的可靠性将主要控制这一点。我认为可以安全地假定任何涉及与一个或多个外部系统(无论是电子邮件)通信的任务都应该在处理时考虑到某种可靠性,即两者之间的持久存储。

长时间运行与其说是一个问题,不如说是如果您在某个时候无法从故障中恢复会发生什么。这就是为什么我在处理工作流时依赖数据库事务来提交或回滚工作流状态。

我会考虑任何可能阻塞超过 2 分钟的操作。根据我有多少可用的免费完成端口,我什至不想等待那么久,但这更多的是负载平衡。保持您的工作流程运行时处理但不阻塞;)

编辑

这 2 分钟的事情来自 RFC 793,它规定任何 TCP 会话都不应保持空闲超过 2 分钟。我认为,如果我的系统正在与您的系统通信并且需要超过 2 分钟才能完成,那么他们不应该等待对方完成。

于 2009-02-18T07:50:12.140 回答