Я пытаюсь раскрыть мои журналы, объединив свои сообщения в журнале. В идеале я добавлял к каждому сообщению какой-то идентификатор, указывающий, что он является частью группы команд, выполняющих какую-то часть работы.Контекст контекста persist для асинхронных вызовов
Если это однопоточное приложение, идентификатор потока будет кандидатом. Однако это решение сильно использует async Task
s, что исключает его использование. Можно ли получить что-то вроде следующего для работы, где каждое выполнение Main()
всегда будет распечатывать один и тот же идентификатор потока?
static async void Main()
{
var t = Task.Run(async() => await MyAsyncMethod());
await t;
}
private static async Task MyAsyncMethod()
{
Debug.WriteLine("Log message: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(1000);
Debug.WriteLine("Log message: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Delay(1000);
Debug.WriteLine("Log message: {0}", Thread.CurrentThread.ManagedThreadId);
}
Создать идентификатор в начале метода и использовать его во всем? Или напишите какой-то идентификатор, связанный с тем, что обрабатывает ваш асинхронный метод. Например, если он обрабатывает некоторые работы, связанные с клиентом, это будет идентификатор клиента. –
@SriramSakthivel Хорошие предложения, но я стараюсь уйти без рефакторинга решения, которое довольно велико. И в идеале свойство, которое я группирую, не будет связано с бизнесом, так как я могу одновременно работать с несколькими рабочими ролями одной и той же сущности, поэтому сообщения журнала чередуются, что вызывает у меня путаницу. –
В этом случае просто инкрементный счетчик должен работать нормально. –