Как связать параллельные события запуска/остановки опкода 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: АктивироватьTaskStart
  • Thead-B: АктивироватьTaskStart

тогда позже

  • Thead-A: АктивироватьTaskStop
  • Thead-B: АктивироватьTaskStop

судя по моему чтению документов ETW, по умолчанию предполагается, что событие Stop относится к самому последнему, непарному событию Start, но я хочу убедиться, что связываю правильные события Start/Stop.

Это возможно? Если да, то как?

Чтобы сделать это более сложным, есть вероятность, что события Start и Stop могут поступать из разных потоков (если мне нужно, я должен иметь возможность сделать потоки липкими).


person Wilka    schedule 22.10.2015    source источник


Ответы (1)


Это называется ActivityTrackig и работает с .Net 4.6. Чтобы это работало автоматически, вы не можете использовать собственные реализации Thread, вы должны обернуть все вызовы в вызовы System.Threading.Tasks.Task.

person magicandre1981    schedule 22.10.2015