C# EventSource活动id和TPL
根据文件,当前活动id应由TPL处理。但是当我得到结果时,来自不同任务的日志事件属于不同的活动。 为了读取消息,我使用进程外语义阻塞svc.2.0.1406.1 工作流程如下:C# EventSource活动id和TPL,c#,task-parallel-library,etw,C#,Task Parallel Library,Etw,根据文件,当前活动id应由TPL处理。但是当我得到结果时,来自不同任务的日志事件属于不同的活动。 为了读取消息,我使用进程外语义阻塞svc.2.0.1406.1 工作流程如下: 1.我设置了活动id,应该使用它。EventSource.SetCurrentThreadActivityId. 2.然后我在同一个线程中有一些代码,但也可以在不同的线程中有很多代码。示例(来自以下任务的日志消息记录为不同的活动ID): Events.Current.TestMethod3(); Task.WaitAl
1.我设置了活动id,应该使用它。EventSource.SetCurrentThreadActivityId.
2.然后我在同一个线程中有一些代码,但也可以在不同的线程中有很多代码。示例(来自以下任务的日志消息记录为不同的活动ID):
Events.Current.TestMethod3();
Task.WaitAll(Task.Factory.StartNew(()=>
{
对于(int i=0;i<10;i++)
{
Events.Current.TestMethod1_Sleep(50);
系统.线程.线程.睡眠(50);
Events.Current.TestMethod2_Continue();
}
}),
Task.Factory.StartNew(()=>
{
对于(int i=0;i<10;i++)
{
Events.Current.TestMethod1_Sleep(60);
系统.线程.线程.睡眠(60);
Events.Current.TestMethod2_Continue();
}
}));
Events.Current.TestMethod3();
有没有办法解决这个问题?也许我应该做一些特殊的事情来解决这个问题?为了让它正常工作,您需要按照描述启用TPL事件源
如果使用进程外侦听器,则无法按名称启用TPL-必须改用TPL EventSource GUID。@Darius TPL将发布将根活动ID与任务活动ID关联的传输事件。它不会将每个任务的活动ID设置为根线程的活动ID。非常非常违反直觉的行为是否可能对所有日志消息使用相同的活动ID?在代码中,我有很多地方使用TPL,如果可能的话,我想在一个地方解决问题?因为发布传输事件的意义是什么,当无法在日志中看到它们是相关的时。
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();