Я ищу способ "добавить некоторый контекст" в мои методы для целей отладки. Хотя использование StackTrace прекрасно работает с кодом синхронизации, при асинхронной работе все перестает работать. Я полностью понимаю, почему, но я не могу найти хороший способ решить эту проблему.
[Scope("method 1")]
private async Task Method1()
{
// ... other awaited calls
await DoWork();
}
[Scope("method 2")]
private async Task Method2()
{
// ... other awaited calls
await DoWork();
}
private async Task DoWork()
{
// Get ScopeAttribute from parent method
var description = new StackTrace()
.GetFrames()
?.SelectMany(f => f.GetMethod().GetCustomAttributes(typeof(ScopeAttribute), false))
.Cast<ScopeAttribute>()
.FirstOrDefault()?.Description;
}
Как добраться до ScopeAttribute
оформленного по родительским методам? В мире синхронизации вышеприведенное просто сработает. В асинхронном мире трассировка стека теряется. Есть идеи?
Решение не обязательно должно включать использование атрибутов.