使用WorkflowCore获取外部数据时,有两种方法可以让流程等待外部数据,一是使用WaitFor注册一个事件,外部数据输入完成后,通过PublishEvent返回流程;另一种是使用Activity,注册一个人工活动,执行到这个活动时,工作流等待,外部代码通过GetPendingActivity获取相应的Activity,通过SubmitActivitySuccess提交数据。具体的使用方法可以参考系列文章《.Net 轻量级工作流引擎 WorkflowCore的使用》看起来两种都可以完成外部数据输入的任务,但实际研究中发现GetPendingActivity无法获取是哪一个工作流实例的活动,如果有两个实例同时运行,就没有办法分清除向哪个流程提报数据:
var id1=host.StartWorkflow("MyActivityWorkflow", 1, myClass).Result;
var id2 = host.StartWorkflow("MyActivityWorkflow", 1, myClass).Result;
//上面两个实例中有相同的activity-1,无法知道这里获取的是哪一个实例的活动,
var activity = host.GetPendingActivity("activity-1", "worker1", TimeSpan.FromMinutes(1)).Result;
WairFor事件发布时有工作流实例ID传入:
host.PublishEvent("MyEvent", workflowId, value);
没有上面的缺陷。