Здравствуйте, Sinix, Вы писали:
S>Дано:
S>S>void ExecuteTraced(Action a, string message)
S>{
S> TraceOpStart(message);
S> a();
S> TraceOpEnd(message);
S>}
S>
S>Делегат в свою очередь может вызывать ExecuteTraced, причём асинхронно (через ThreadPool, BeginInvoke, PLINQ etc, поэтому вставить свой код-заглушку перед началом асинхронного вызова не выйдет).
S>Как бы организовать трассировку с учётом вложенности вызовов?
S>CallContext имеет неприятную особенность — значения в нём заменяются после выполнения EndInvoke(), причём даже если EndInvoke былл выполнен асинхронно.
S>По сути задача сводится к "получить id потока, запустившего выполнение в текущем".
А посмотрите на CorrelationManager Class
http://msdn.microsoft.com/en-us/library/system.diagnostics.correlationmanager.aspx. Может, это то, что Вы хотели?