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

3
我正在使用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文档阅读,它将默认假定Stop事件属于最近未成对的Start事件,但我想确保我连接了正确的Start / Stop事件。
这是否可能?如果是,怎么做?
更加复杂的是,开始和停止事件可能来自不同的线程(如果需要,我应该能够使线程粘性)。
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接