Перед использованием параллельной библиотеки задач я часто использовал CorrelationManager.ActivityId для отслеживания трассировки / отчетов об ошибках с несколькими потоками.
ActivityId хранится в локальном хранилище потоков. , поэтому каждый поток получает свою копию. Идея в том, что когда вы запускаете поток (действие), вы назначаете новый ActivityId. ActivityId будет записан в журналы вместе с любой другой информацией трассировки, что позволит выделить информацию трассировки для одного «Действия». Это действительно полезно с WCF, поскольку ActivityId может быть перенесен в компонент службы.
Вот пример того, о чем я говорю:
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback((o) =>
{
DoWork();
}));
}
static void DoWork()
{
try
{
Trace.CorrelationManager.ActivityId = Guid.NewGuid();
//The functions below contain tracing which logs the ActivityID.
CallFunction1();
CallFunction2();
CallFunction3();
}
catch (Exception ex)
{
Trace.Write(Trace.CorrelationManager.ActivityId + " " + ex.ToString());
}
}
Теперь, с TPL, Я понимаю, что несколько задач разделяют потоки. Означает ли это, что ActivityId может быть повторно инициализирован в середине задачи (другой задачей)? Есть ли новый механизм для отслеживания активности?