Я использую 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: АктивироватьTaskStart
- Thead-B: АктивироватьTaskStart
тогда позже
- Thead-A: АктивироватьTaskStop
- Thead-B: АктивироватьTaskStop
судя по моему чтению документов ETW, по умолчанию предполагается, что событие Stop относится к самому последнему, непарному событию Start, но я хочу убедиться, что связываю правильные события Start/Stop.
Это возможно? Если да, то как?
Чтобы сделать это более сложным, есть вероятность, что события Start и Stop могут поступать из разных потоков (если мне нужно, я должен иметь возможность сделать потоки липкими).