如何 link ETW start/stop 操作码并发事件
How to link ETW start/stop Opcode concurrent events
我正在使用 ETW,并记录一些具有停止和停止操作码的事件,例如
[Event(1, Task = Tasks.ActivateTask, Opcode = EventOpcode.Start)]
public void ActivateTaskStart(string TaskName)
{
if (IsEnabled())
{
WriteEvent(1, TaskName);
}
}
[Event(2, Task = Tasks.ActivateTask, Opcode = EventOpcode.Stop)]
public void ActivateTaskStop(string TaskName)
{
if (IsEnabled())
{
WriteEvent(2, TaskName);
}
}
如果我有两个线程都在记录 ActivateTask start/stop 事件,我如何确保事件正确配对?例如如果我有:
- Thead-A: ActivateTaskStart
- Thead-B: ActivateTaskStart
然后
- Thead-A: ActivateTaskStop
- Thead-B: ActivateTaskStop
根据我对 ETW 文档的阅读,它默认假设 Stop 事件属于最近的、未配对的 Start 事件——但我想确保我链接的是正确的 Start/Stop事件。
这可能吗?如果是,怎么做?
为了使事情变得更复杂,启动和停止事件有可能来自不同的线程(如果需要,我应该能够使线程保持粘性)。
这叫做ActivityTrackig and works since .Net 4.6。要使其自动运行,您不能使用自己的 Thread 实现,您必须将所有调用包装到 System.Threading.Tasks.Task 调用中。
我正在使用 ETW,并记录一些具有停止和停止操作码的事件,例如
[Event(1, Task = Tasks.ActivateTask, Opcode = EventOpcode.Start)]
public void ActivateTaskStart(string TaskName)
{
if (IsEnabled())
{
WriteEvent(1, TaskName);
}
}
[Event(2, Task = Tasks.ActivateTask, Opcode = EventOpcode.Stop)]
public void ActivateTaskStop(string TaskName)
{
if (IsEnabled())
{
WriteEvent(2, TaskName);
}
}
如果我有两个线程都在记录 ActivateTask start/stop 事件,我如何确保事件正确配对?例如如果我有:
- Thead-A: ActivateTaskStart
- Thead-B: ActivateTaskStart
然后
- Thead-A: ActivateTaskStop
- Thead-B: ActivateTaskStop
根据我对 ETW 文档的阅读,它默认假设 Stop 事件属于最近的、未配对的 Start 事件——但我想确保我链接的是正确的 Start/Stop事件。
这可能吗?如果是,怎么做?
为了使事情变得更复杂,启动和停止事件有可能来自不同的线程(如果需要,我应该能够使线程保持粘性)。
这叫做ActivityTrackig and works since .Net 4.6。要使其自动运行,您不能使用自己的 Thread 实现,您必须将所有调用包装到 System.Threading.Tasks.Task 调用中。