如何链接ETW启动/停止操作码并发事件

本文关键字:操作码 事件 并发 启动 ETW 何链接 链接 | 更新日期: 2023-09-27 18:18:45

我正在使用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启动/停止事件,我如何确保事件正确配对?如果我有:

  • Thead-A: ActivateTaskStart
  • Thead-B: ActivateTaskStart

之后

  • Thead-A: ActivateTaskStop
  • Thead-B: ActivateTaskStop
根据我对ETW文档的阅读,它将默认假设停止事件属于最近的,未配对的开始事件-但我想确保我链接了正确的开始/停止事件。

这可能吗?如果有,怎么做?

更复杂的是,Start和Stop事件可能来自不同的线程(如果我需要,我应该能够使线程保持粘性)。

如何链接ETW启动/停止操作码并发事件

这叫做ActivityTrackig,从。net 4.6开始工作。要使其自动工作,您不能使用自己的Thread实现,您必须将所有调用包装到System.Threading.Tasks.Task调用中。