首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从工作流内部取消或终止工作流

如何从工作流内部取消或终止工作流
EN

Stack Overflow用户
提问于 2011-11-16 20:02:49
回答 3查看 5.5K关注 0票数 2

我有一个在ftp站点之间移动文件的工作流程。可能的情况是,当工作流将要复制文件时,用户从ftp站点删除文件。我可以检测到文件已丢失,因此我想取消即将进行文件传输的工作流。

我使用工厂启动我的工作流。工厂创建一个助手类(wfManager),助手类使用WorkflowApplication启动实际的工作流。

工作流本身根据文件是否丢失来确定是否应该关闭。工作流具有对启动它的wfManager的引用,因此从wfManager调用workflowApplication.close

我原以为如果我在wfManager中使用WorkflowApplication.close,工作流会关闭。

然而,关闭超时了。

关闭超时的原因是什么?有没有通过代码关闭或终止工作流的通用方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-16 20:35:38

你基本上有3种选择来结束一个工作流程:

  • Cancel

正如您所看到的,这需要等待一段时间(这样工作流就可以完成它当前正在做的任何事情),然后关闭工作流,然后调用OnCompleted handler

  • Terminate

这需要一个终止原因(作为参数),等待一段时间(这样工作流就可以完成它当前正在做的任何事情),然后关闭工作流,然后调用OnCompleted handler

  • Abort

这只会终止工作流,而不会调用OnCompleted处理程序。

MSDN参考:

  • http://msdn.microsoft.com/en-us/library/dd987846.aspx
  • http://msdn.microsoft.com/en-us/library/ms611688.aspx
票数 4
EN

Stack Overflow用户

发布于 2011-11-16 21:31:21

此外,您可以使用TerminateWorkflow活动从工作流内部终止工作流。

还要记住,WF4中的所有内容都是异步的,如果工作流在某个活动中阻塞,Cancel()调用将会超时,因为调度程序一次只会执行一个操作。

票数 2
EN

Stack Overflow用户

发布于 2011-12-10 03:27:16

如果工作流决定要取消自身,则有两种选择

  1. 引发未处理的异常-工作流中的结果已中止(可继续)
  2. 使用终止活动-工作流中的结果已终止(工作流完成)

在您的场景中,您应该使用Terminate活动。

试图回调试图取消回调线程上的工作流的其他对象是一种灾难(正如您所发现的)。同样,您不能从任何委托处理程序或扩展中取消工作流。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8151356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档