c# - 如何链接 ETW 启动/停止 Opcode 并发事件

标签 c# etw

我正在使用 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 事件有可能来自不同的线程(如果需要,我应该能够使线程保持粘性)。

最佳答案

这叫做 ActivityTrackig and works since .Net 4.6 .要使其自动运行,您不能使用自己的 Thread 实现,您必须将所有调用包装到 System.Threading.Tasks.Task 调用中。

关于c# - 如何链接 ETW 启动/停止 Opcode 并发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279820/

相关文章:

c# - 装饰通用注册的子集

hook - Procmon 如何在 64 位 Vista+ 上工作?

etw - Windows - 查看事件的 ETW session ,以便我可以关闭其中一个

.net - 是否可以在 ETW 中对 EventSource 进行子类化?

c# - 任务中的类似代码返回不同的状态代码

c# - 使用 Web API 反序列化为具有抽象属性的类

c# - 正则表达式能做到这一点吗?

c# - Windows Phone 禁用应用程序栏按钮

c# - 从事件跟踪 ETW 文件日志 C# 中的 FileObject 或 FileKey 获取 FileName

windows - 消费 "Event Tracing for Windows"事件