2014-12-23 3 views
2

Согласно документации http://msdn.microsoft.com/en-us/library/dn775009%28v=pandp.20%29.aspx текущий идентификатор активности должен обрабатываться TPL. Но когда я получаю результаты, события журнала из разных задач относятся к разным видам деятельности. Чтение сообщений, которые я использую из процесса SemanticLogging-svc.2.0.1406.1 Порядок работы:
1. Я установил идентификатор активности, который будет использоваться. EventSource.SetCurrentThreadActivityId.
2. Тогда у меня есть код в том же потоке, но также может быть много кода в разных потоках. Пример. Журнальные сообщения из нижеперечисленных задач регистрируются как разные идентификаторы активности.Идентификатор активности EventSource и TPL

Events.Current.TestMethod3(); 
Task.WaitAll(Task.Factory.StartNew(() => 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     Events.Current.TestMethod1_Sleep(50); 
     System.Threading.Thread.Sleep(50); 
     Events.Current.TestMethod2_Continue(); 
    } 
}), 
Task.Factory.StartNew(() => 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     Events.Current.TestMethod1_Sleep(60); 
     System.Threading.Thread.Sleep(60); 
     Events.Current.TestMethod2_Continue(); 
    } 
})); 
Events.Current.TestMethod3(); 

Любые идеи, как это решить? Может быть, я буду делать особые вещи, чтобы решить это?

+0

@Darius TPL будет * публиковать события переноса *, которые коррелируют корневой идентификатор активности с идентификаторами активности задач. Он не будет устанавливать идентификатор активности каждой задачи в идентификатор активности корневого потока. Очень, очень противоречивое поведение –

+0

Возможно ли иметь одинаковый идентификатор активности для всех сообщений журнала? В коде у меня много мест, где используется TPL, и я хочу как-то решить проблему в одном месте? Потому что смысл публиковать события переноса, когда невозможно увидеть, что они связаны в журнале. – Darius

ответ

2

Для того, чтобы это сработало, вам необходимо включить источник событий TPL, как описано here.

Если вы используете прослушиватели процессов, то есть bug, в результате чего невозможно включить TPL по имени - вместо этого вы должны использовать GUID TPS EventSource.

Смежные вопросы