Согласно документации 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();
Любые идеи, как это решить? Может быть, я буду делать особые вещи, чтобы решить это?
@Darius TPL будет * публиковать события переноса *, которые коррелируют корневой идентификатор активности с идентификаторами активности задач. Он не будет устанавливать идентификатор активности каждой задачи в идентификатор активности корневого потока. Очень, очень противоречивое поведение –
Возможно ли иметь одинаковый идентификатор активности для всех сообщений журнала? В коде у меня много мест, где используется TPL, и я хочу как-то решить проблему в одном месте? Потому что смысл публиковать события переноса, когда невозможно увидеть, что они связаны в журнале. – Darius