EventSource活动ID和TPL

时间:2014-12-23 08:35:04

标签: c# task-parallel-library etw

根据文档http://msdn.microsoft.com/en-us/library/dn775009%28v=pandp.20%29.aspx,当前活动ID应由TPL处理。但是当我得到结果时,来自不同任务的日志事件属于不同的活动。 要读取我在进程SemanticLogging-svc.2.0.1406.1之外使用的消息 工作流程如下:
1.我设置了活动ID,应该使用它。 EventSource.SetCurrentThreadActivityId。
2.然后我在同一个线程中有一些代码,但也可以在不同的线程中有很多代码。示例(来自以下任务的日志消息记录为不同的活动ID):

Events.Current.TestMethod3();
Task.WaitAll(Task.Factory.StartNew(() =>
{
    for (int i = 0; i < 10; i++)
    {
        Events.Current.TestMethod1_Sleep(50);
        System.Threading.Thread.Sleep(50);
        Events.Current.TestMethod2_Continue();
    }
}),
Task.Factory.StartNew(() =>
{
    for (int i = 0; i < 10; i++)
    {
        Events.Current.TestMethod1_Sleep(60);
        System.Threading.Thread.Sleep(60);
        Events.Current.TestMethod2_Continue();
    }
}));
Events.Current.TestMethod3();

任何想法如何解决?也许我会做一些特别的事来解决这个问题?

1 个答案:

答案 0 :(得分:2)

为了使其正常工作,您需要按照here所述启用TPL事件源。

如果您使用了进程外侦听器,则bug无法通过名称启用TPL - 您必须改为使用TPL EventSource GUID。