我正在使用 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/