我正在使用Workflow Foundation中的SqlTrackingService,我想在继续执行任何代码之前确保我的跟踪数据是持久的。根据我的阅读,跟踪服务应该执行以下操作之一:
或
我真正需要的是第二种选择。第一个回复here表明尽管可能存在性能问题,但仍有可能。但是,它似乎没有正常工作。
在我的活动中,我已连接到队列。当队列项可用时,我正在执行以下操作(仅用于测试):
private void TestTracking()
{
TrackData("Key", new TrackingDataContainer("Value", Name, DateTime.Now));
var sqlTrackingQuery = new SqlTrackingQuery(ConnectionString);
SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
sqlTrackingQuery.TryGetWorkflow(WorkflowInstanceId, out
sqlTrackingWorkflowInstance);
var events = sqlTrackingWorkflowInstance.UserEvents
.Where(p => typeof (TrackingDataContainer)
.IsAssignableFrom(p.UserData.GetType()))
.Where(p => p.UserDataKey == "Key")
.ToList();
MessageBox.Show(events.Count().ToString());
}
我希望第一次使队列项可用时,我看到消息1.相反,它是0.如果我发布另一个队列项,我期望2,但是已经看到1.我推测如果我是为了更快地添加队列项,我在两种情况下都可能看到0。
对我而言,这似乎是异步的。我也尝试过调试看起来有用的Thread.sleep,但这是一种令人讨厌的做事方式。有什么建议吗?