有没有人在BookmarkOptions.NonBlocking中使用CreateBookmark()? 我正在尝试将它与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'
我很感激任何演示NonBlocking选项的工作代码。
答案 0 :(得分:1)
即使 NonBlocking 书签在完成创建活动的活动时也会被删除。它们允许活动继续执行,但就是这样。
您需要将活动维持在未完成状态(通常是外部活动)的底线,即使找到 NonBlocking 书签,其中的所有内容也会执行
这就是您收到 NotFound 错误的原因。创建书签的活动已结束,书签不再存在。
PS: NonBlocing 书签的某种常见用例是,例如,当你有一个长时间运行的活动时,可能会在执行时抛出异常,这样你就有可能恢复以前状态的工作流程。