同步工作流程跟踪

时间:2010-01-11 17:49:05

标签: workflow-foundation

我正在使用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,但这是一种令人讨厌的做事方式。有什么建议吗?

0 个答案:

没有答案