有人在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”
我将感谢任何演示NonBlocking选项的工作代码。
发布于 2013-07-05 12:55:22
即使是NonBlocking书签也会在创建它的活动完成后被移除。他们允许活动继续执行,但仅此而已。
总之,您必须在未完成的状态(通常是外部活动)中维护一个活动,即使在找到NonBlocking书签时,它中的所有内容也会执行。
这就是为什么您要得到一个NotFound错误。创建书签的活动已经结束,书签不再存在。
P.S.:NonBlocing书签的一个常见用例是,例如,当您有一个长时间运行的活动时,可能会在执行时抛出异常,这样您就有可能在以前的状态下恢复工作流。
https://stackoverflow.com/questions/17483767
复制相似问题