为Workflow Foundation(3.0 / 3.5)编写长时间运行的自定义活动的最佳实践建议 对于活动来说,完全在活动的Execute方法中执行长时间运行的任务并不是一个好主意。分配给工作流的单个线程将被阻止,这将阻止处理工作流的其他计划请求。
因此,对于长时间运行的任务,应该创建一个队列。实际工作将由本地服务(在线程池线程上运行)完成。此服务通过先前的工作流队列将工作结果传递给等待活动。
所以我的问题是,长期运行的具体内容是什么?这是处理时间的问题吗?什么时候应该创建队列?何时只使用本地服务?
感谢您的任何澄清。
答案 0 :(得分:1)
您需要什么样的可靠性才能主导这一点。我觉得可以安全地假设任何涉及与一个或多个外部系统通信的任务(无论是电子邮件)都应该考虑到一些可靠性,即两者之间的持久存储。
长时间运行并不是一个问题,如果你在某些时候无法从失败中恢复过来会发生什么。这就是为什么我在处理工作流时依赖数据库事务来提交或回滚工作流状态。
我会考虑任何可能在长时间运行中阻止超过2分钟的操作。根据我有多少可用的自由完成端口,我可能甚至不想等待那么久,但这更像是负载平衡的事情。保持工作流运行时运行状态,但不会阻塞;)
这个2分钟的事情来自RFC 793,它规定没有TCP会话应该保持闲置超过2分钟。我想如果我的系统正在与您的系统通信并且需要花费超过2分钟才能完成,那么他们不应该等待彼此完成。