c# - WF4中如何取消子事件?

标签 c# workflow-foundation-4

我创建了一个包含子事件集合的自定义 native 事件。如果其中一项事件失败,我正在尝试取消子事件。调用 context.CancelChildren() 不会在子事件中调用 cancel

示例如下:

public sealed class MyCompositeActivity : NativeActivity
{
    public Collection<Activity> Activities { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
        ScheduleActivity(context);
    }

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);

        metadata.SetChildrenCollection(Activities);
     }

    private void ScheduleActivity(NativeActivityContext context)
    {
        // Get next activity
        ....
        context.ScheduleActivity(nextActivity, OnActivityCompleted, OnActivityFaulted);
    }

    private static void OnActivityFaulted(NativeActivityFaultContext context, Exception exception, ActivityInstance faultedInstance)
    {
        context.HandleFault();
        context.CancelChildren();
    }
}

最佳答案

取消要求事件正在执行。因此,它要么是等待书签恢复的异步事件,要么是等待子事件完成的复合事件。最常见但不是唯一发生取消的地方是如果有多个并行分支并且一个分支抛出异常。其他 banches 无法继续运行,因为存在未处理的异常,因此它们被取消。

从您提供的代码示例来看,似乎没有并行行为,您正在安排前一个事件完成后的事件。由于执行的单个事件会引发错误,因此没有其他事件可以取消。

关于c# - WF4中如何取消子事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13602407/

相关文章:

c# - MVC3网站编译器错误

c# - 如何使用集合来存储委托(delegate)?

c# - 在这种情况下我可以使用WF 4吗?

c# - 异步数据库操作

wpf - 自定义事件设计器中的参数验证

c# - 动态 PropertyGrid 属性

c# - 将 float[][] 编码为 float**

c# - 基于自定义属性的 JsonConverter

workflow-foundation - 从 WF 4 事件动态设置外部范围中的变量

.net-3.5 - Windows 工作流动态、用户创建的工作流