首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WF4:带有NonBlocking选项的书签

WF4:带有NonBlocking选项的书签
EN

Stack Overflow用户
提问于 2013-07-05 07:50:44
回答 1查看 664关注 0票数 0

有人在CreateBookmark()和BookmarkOptions.NonBlocking一起使用过吗?我正在尝试将它与MultipleResume选项结合使用,但似乎我甚至无法继续使用它。

书签活动:

代码语言:javascript
复制
    public InArgument<string> BookmarkName { get; set; }
    public InArgument<BookmarkOptions> BookmarkOptions { get; set; }

    protected override void Execute(NativeActivityContext context)
    {
        var options = BookmarkOptions.Get(context);
        context.CreateBookmark(BookmarkName.Get(context),
                                          ReadCompleteCallback,options);
    }

测试代码:

代码语言:javascript
复制
 [TestMethod]
    public void TestMethod1()
    {
        InitWorkflow();
        wfat = WorkflowApplicationTest.Create(sm);
        wfat.TestActivity();
        Assert.IsTrue(wfat.WaitForIdleEvent());
        var res = wfat.TestWorkflowApplication.ResumeBookmark("First", "data");
        Assert.IsTrue(res == BookmarkResumptionResult.Success, "Resumption fail with result:" + res);
        Assert.IsTrue(wfat.Bookmarks.Contains("First"), "No first bkmk");

    }


    private void InitWorkflow()
    {

        sm = new StateMachine()
        {
            States = 
             {        //First state with non blocking bookmark             
                 new State(){
                      DisplayName = "First",Entry = new BookmarkActivity(){BookmarkName = "First",BookmarkOptions =
                                BookmarkOptions.NonBlocking | BookmarkOptions.MultipleResume},
                      Transitions = 
                      {
                            new Transition(){ }
                     }
                 },    //Second state with blocking bookmark
                 new State(){
                     DisplayName = "Second",Entry =  new BookmarkActivity(){BookmarkName = "Second",BookmarkOptions =
                                BookmarkOptions.None},
                     Transitions = 
                     {
                         new Transition(){ }
                     }
                 },
                 new State(){
                     DisplayName = "End",
                    IsFinal = true
                 }
             }
        };
        sm.InitialState = sm.States[0];
        sm.InitialState.Transitions[0].To = sm.States[1];
        sm.States[1].Transitions[0].To = sm.States[2];
    }

ResumeBookmark在上述测试代码中的结果是“NotFound”

我将感谢任何演示NonBlocking选项的工作代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-05 12:55:22

即使是NonBlocking书签也会在创建它的活动完成后被移除。他们允许活动继续执行,但仅此而已。

总之,您必须在未完成的状态(通常是外部活动)中维护一个活动,即使在找到NonBlocking书签时,它中的所有内容也会执行。

这就是为什么您要得到一个NotFound错误。创建书签的活动已经结束,书签不再存在。

P.S.:NonBlocing书签的一个常见用例是,例如,当您有一个长时间运行的活动时,可能会在执行时抛出异常,这样您就有可能在以前的状态下恢复工作流。

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

https://stackoverflow.com/questions/17483767

复制
相关文章

相似问题

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