我有一个在ftp站点之间移动文件的工作流程。可能的情况是,当工作流将要复制文件时,用户从ftp站点删除文件。我可以检测到文件已丢失,因此我想取消即将进行文件传输的工作流。
我使用工厂启动我的工作流。工厂创建一个助手类(wfManager),助手类使用WorkflowApplication启动实际的工作流。
工作流本身根据文件是否丢失来确定是否应该关闭。工作流具有对启动它的wfManager的引用,因此从wfManager调用workflowApplication.close
我原以为如果我在wfManager中使用WorkflowApplication.close,工作流会关闭。
然而,关闭超时了。
关闭超时的原因是什么?有没有通过代码关闭或终止工作流的通用方法?
发布于 2011-11-16 20:35:38
你基本上有3种选择来结束一个工作流程:
Cancel正如您所看到的,这需要等待一段时间(这样工作流就可以完成它当前正在做的任何事情),然后关闭工作流,然后调用OnCompleted handler
Terminate这需要一个终止原因(作为参数),等待一段时间(这样工作流就可以完成它当前正在做的任何事情),然后关闭工作流,然后调用OnCompleted handler
Abort这只会终止工作流,而不会调用OnCompleted处理程序。
MSDN参考:
发布于 2011-11-16 21:31:21
此外,您可以使用TerminateWorkflow活动从工作流内部终止工作流。
还要记住,WF4中的所有内容都是异步的,如果工作流在某个活动中阻塞,Cancel()调用将会超时,因为调度程序一次只会执行一个操作。
发布于 2011-12-10 03:27:16
如果工作流决定要取消自身,则有两种选择
在您的场景中,您应该使用Terminate活动。
试图回调试图取消回调线程上的工作流的其他对象是一种灾难(正如您所发现的)。同样,您不能从任何委托处理程序或扩展中取消工作流。
https://stackoverflow.com/questions/8151356
复制相似问题