• WF4.0 Beta1 CancellationScope 取消容器


    WF4.0 Beta1 CancellationScope 取消容器

     

    在WF4中,可以使用[Parallel] 并行执行多条分支,当[Parallel]中的所有分支都执行完成后,[Parallel]结束.

    在WF4中,可以使用[Pick]实现多条等待分支的单线执行,当一条分支被触发后,其它分支就不会被触发了,当触发的分支完成后,[Pick]结束

    但有时我们会的这样一种需求,我们需要并行执行多条分支,当并行分支中的一条或几条分支满足指定条件时,其它正在执行的分支就不执了.同时,为了保证数据的完整性,我们需要在那些可能要取消的分支中余留一组代码.这组代码用于在该分支被取消后做一些收尾工做.

    CancellationScope 取消容器

    类名: System.Activities.Statements.CancellationScope

    基类: NativeActivity

    文件: System.Activities.dll

    类型: sealed

    说明: 1. 在WF4中,可以使用[Parallel] 并行执行多条分支,当[Parallel]中的所有分支都执行完成后,[Parallel]结束.

    可以使用[Pick]实现多条等待分支的单线执行,当一条分支被触发后,其它分支就不会被触发了,当触发的分支完成后,[Pick]结束

    但有时我们会的这样一种需求,我们需要并行执行多条分支,当并行分支中的一条或几条分支满足指定条件时,其它正在执行的分支就不执了.同时,为了保证数据的完整性,我们需要在那些可能要取消的分支中余留一组代码.这组代码用于在该分支被取消后做一些收尾工做.

    2. [CancellationScope]由[Body]与 [CancelHandler] 两部分组成,[Body]为正常执行路径, 如果取消执行会调用 [CancelHandler]中的内容

    3. 可以在[Parallel]容器中使用[CancellationScope],当[Parallel]的[CompletionCondition]属性为[True]时,[Parallel]容器会在其内部[CancellationScope]容器执行完成后,结束其它正在执行的并行分支.如果其它正在执行的并行分支是[CancellationScope],则会调用该[CancellationScope]的[CancelHandler]

     

    流程

    <p:Activity

    mc:Ignorable=""

    x:Class="WorkflowConsoleApplication4.Sequence1" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design" xmlns:__Sequence1="clr-namespace:WorkflowConsoleApplication4;" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <p:Sequence>

    <p:Parallel CompletionCondition="[True]">

    <p:CancellationScope DisplayName="CancellationScope:A">

    <p:CancellationScope.CancelHandler>

    <p:WriteLine DisplayName="WriteLine:Cancel A">["Cancel A"]</p:WriteLine>

    </p:CancellationScope.CancelHandler>

    <p:Sequence>

    <p:WriteLine DisplayName="WriteLine:begin A">["begin A"]</p:WriteLine>

    <p:Delay DisplayName="Delay:5">[New TimeSpan(0, 0, 5)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine:end A">["end A"]</p:WriteLine>

    </p:Sequence>

    </p:CancellationScope>

    <p:CancellationScope DisplayName="CancellationScope:B">

    <p:CancellationScope.CancelHandler>

    <p:WriteLine DisplayName="WriteLine:Cancel B">["Cancel B"]</p:WriteLine>

    </p:CancellationScope.CancelHandler>

    <p:Sequence>

    <p:WriteLine DisplayName="WriteLine:begin B">["begin B"]</p:WriteLine>

    <p:Delay DisplayName="Delay:10">[New TimeSpan(0, 0, 10)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine:end B">["end B"]</p:WriteLine>

    </p:Sequence>

    </p:CancellationScope>

    <p:CancellationScope DisplayName="CancellationScope:C">

    <p:CancellationScope.CancelHandler>

    <p:WriteLine DisplayName="WriteLine:Cancel C">["Cancel C"]</p:WriteLine>

    </p:CancellationScope.CancelHandler>

    <p:Sequence>

    <p:WriteLine DisplayName="WriteLine:begin C">["begin C"]</p:WriteLine>

    <p:Delay DisplayName="Delay:3">[New TimeSpan(0, 0, 3)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine:end C">["end C"]</p:WriteLine>

    </p:Sequence>

    </p:CancellationScope>

    <p:Sequence DisplayName="Sequence:D">

    <p:WriteLine DisplayName="WriteLine:begin D">["begin D"]</p:WriteLine>

    <p:Delay DisplayName="Delay:8">[New TimeSpan(0, 0, 8)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine:end D">["end D"]</p:WriteLine>

    </p:Sequence>

    </p:Parallel>

    <p:WriteLine DisplayName="WriteLine:wxwinter">["wxwinter"]</p:WriteLine>

    </p:Sequence>

    </p:Activity>

    宿主

    WorkflowInstance myInstance = new WorkflowInstance(new Sequence1());

    myInstance.OnCompleted = delegate(WorkflowCompletedEventArgs e) { System.Console.WriteLine("Completed "); };

     

    myInstance.Run();

     

    System.Console.Read();

    结果

    [Parallel][CompletionCondition]属性为[False]

    结果

    [Parallel][CompletionCondition]属性为[False]

     

     

  • 相关阅读:
    卷积核、滤波器、卷积层
    python lambda函数 匿名函数
    神经网络权重初始化方法He、Xavier初始化
    1*1卷积核的作用
    3d卷积
    tf.nn.softplus. softplus激活函数
    Python函数中的*args, **kwargs是什么意思?如何使用?
    QMutexLocker
    QFuture.isFinished()为true,QFuture.waitForFinished()竟然报错
    QPixmap::fromImage(img)访问冲突
  • 原文地址:https://www.cnblogs.com/foundation/p/1507391.html
Copyright © 2020-2023  润新知