0

有没有人将 CreateBookmark() 与 BookmarkOptions.NonBlocking 一起使用?我正在尝试将它与 MultipleResume 选项一起使用,但似乎我什至无法恢复。

书签活动:

    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);
    }

测试代码:


 [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'

我将不胜感激任何演示非阻塞选项的工作代码。

4

1 回答 1

1

当创建它的活动完成时,即使是非阻塞书签也会被删除。他们允许活动继续执行,仅此而已。

最重要的是,您必须将活动保持在未完成状态(通常是外部活动),并且即使找到非阻塞书签,其中的所有内容也会执行。

这就是您收到NotFound错误的原因。创建书签的活动已结束,书签不再存在。

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

于 2013-07-05T12:55:22.847 回答