我想通過使用反射等得到這種方法的名稱...我使用了很多東西,但我累了,請幫助我。 如果該功能是同步,那麼它下面的代碼將正常工作。請通過下面的代碼,這將清除你的我的問題。我們如何才能得到異步方法名稱在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; });
}
此方法爲我提供了非異步方法的名稱。但我如何得到以上方法名稱
> [MethodImpl(MethodImplOptions.NoInlining)]
> public static string GetCurrentMethod()
> {
> var stackTrace = new StackTrace();
> StackFrame stackFrame = stackTrace.GetFrame(1);
> return stackFrame.GetMethod().Name;
> }
但是,此方法只適用於不是異步方法。那麼如何在c#中獲取當前的異步方法名稱?
這裏的問題是,在你的特定情況下,使用'Task.Run'的「堆棧」不是一個自然堆棧,因此線程池線程已經啓動運行你的匿名方法,因此,堆棧不包含特定於「GETNumber」方法的任何內容。 *但是,在這種特殊情況下,匿名方法的生成名稱包含名稱,該方法的名稱就像''。 b__1_0'。 –
現在,問題是,你到底需要什麼名字? –
檢查:[從異步函數獲取當前方法名稱](http://stackoverflow.com/q/20158902/1351076) – krlzlx