Я хочу получить имя этого метода, используя Отражение и т. Д. Я использую много вещей, но я устал, пожалуйста, помогите мне. Если функция синхронизирована, то код ниже будет работать нормально. Пожалуйста, перейдите к приведенному ниже коду, который очистит вас от моего вопроса.Как мы можем получить имя асинхронного метода В C#
// this will work fine
public void Test()
{
// This GetCurrentMethod() will you the name of current method
string CurrentMethodName = GetCurrentMethod();
// output will be CurrentMethodName = Test
}
// this will not work
public async Task<int> GETNumber(long ID)
{
// This GetCurrentMethod() will you the name of current method if the method is sync or not async
string CurrentMethodName = GetCurrentMethod();
return await Task.Run(() => { return 20; });
}
Этот метод предоставьте мне имя метода non async. но как я получаю выше имя метода
> [MethodImpl(MethodImplOptions.NoInlining)]
> public static string GetCurrentMethod()
> {
> var stackTrace = new StackTrace();
> StackFrame stackFrame = stackTrace.GetFrame(1);
> return stackFrame.GetMethod().Name;
> }
Но этот метод работает только для не асинхронного метода. Итак, как получить текущее имя метода асинхронного программирования в C#
Проблема заключается в том, что «стек» в вашем конкретном случае с использованием 'Task.Run' не является естественным стеком как таковым, поток threadpool был развернут для запуска вашего анонимного метода, как такового, стек не содержит ничего конкретного для метода 'GETNumber'. * Однако * в данном конкретном случае сгенерированное имя для вашего анонимного метода содержит имя, имя метода будет выглядеть как '. b__1_0'. –
Теперь вопрос в том, для чего именно нужно имя? –
Проверка: [Получить имя текущего метода из функции async] (http://stackoverflow.com/q/20158902/1351076) – krlzlx