我有一个很长的工作流程,可以在视频处理设备之间移动视频文件,然后将文件状态报告给用于驱动UI的数据库
用户有时按下UI上的按钮以“接受”文件到视频存储服务器。这涉及将文件从一个服务器复制到另一个服务器。]
他们询问是否可以取消此活动。
我查看了wf4文档,但我看不到回滚部分工作流的方法。
这是可能的,我应该使用什么技术。
答案 0 :(得分:2)
这是恢复工作的两个基本的内部活动。
使用Compensable活动,您可以向补偿处理程序添加活动以撤消之前完成的工作。 Compensate活动可用于触发补偿。如果没有补偿,您将在工作流程结束时或在使用Conform活动时获得确认处理程序。
有关详细信息,请参阅Matt Milner的A Developer's Introduction to Windows Workflow Foundation (WF) in .NET 4。
答案 1 :(得分:1)
不确定我是否完全了解您的情况,但我认为您需要在异步线程上运行转移过程,不时检查"取消"变量以执行回滚。可以在UI的主线程上修改此变量。
当然,这将允许您在转移之间取消,而不是在单次转移中取消。
答案 2 :(得分:1)
好的,我们首先要说,“回滚”已经上传的内容的处理必须手工完成,所以无论你在哪里储存这些块,你都需要在取消时用手清理
现在,关于工作流程本身,在我看来,您可以像这样设置FlowChart
:
好的,让我们分解这个工作流程。整个服务应该与某个客户端密钥相关联,这样您就可以每个客户端使用Start
启动一次服务,以降低启动成本。
接下来,当所述客户想要开始转移时,您将调用BeginTransfer
,它将进入转移循环。设置传输循环,以便您可以在必要时通过调用CancelTransfer
取消组块。
在此模型中,同样的分支也用于完成传输,因为它已经离开循环,因此当您完成传输块时,只需调用CancelTransfer
(如果您不喜欢只是设置一个看起来完全相同的不同分支。)
最后,当您处于流程循环中时,您可以SoftExit
整个工作流程并将其关闭,以便在有必要的维护或时可以轻轻地将其删除客户端已完成其连接,需要调用SoftExit
来处理它。