7
A
回答
13
否 - 至少不明智。 async
只是一個源代碼註釋,告訴C#編譯器您確實需要一個異步函數/匿名函數。
您可以取MethodInfo
爲代表,並檢查其是否已應用適當的屬性。我個人不會 - 需要知道的是一種設計氣味。特別是考慮,如果你重構大部分代碼出來的lambda表達式的會發生什麼事成另一種方法,則使用:
Action a =() => CallMethodAsync();
在這一點上,你不有一個異步的λ,但語義會是一樣的。爲什麼你會希望使用委託的代碼具有不同的行爲?
編輯:此代碼似乎工作,但我會強烈反對它:
using System;
using System.Runtime.CompilerServices;
class Test
{
static void Main()
{
Console.WriteLine(IsThisAsync(() => {})); // False
Console.WriteLine(IsThisAsync(async() => {})); // True
}
static bool IsThisAsync(Action action)
{
return action.Method.IsDefined(typeof(AsyncStateMachineAttribute),
false);
}
}
3
當然,你可以做到這一點。
private static bool IsAsyncAppliedToDelegate(Delegate d)
{
return d.Method.GetCustomAttribute(typeof(AsyncStateMachineAttribute)) != null;
}
相關問題
- 1. 檢查拉姆達代碼
- 2. 不能等待異步拉姆達
- 3. 異步參考拉姆達崩潰
- 4. C++異步拉姆達「遞歸」呼叫
- 5. 拉姆達性能差異?
- 6. AWS拉姆達異步和同步問題
- 7. XML拉姆達查詢
- 8. Optimalisation拉姆達查詢
- 9. 轉換查詢拉姆達
- 10. 什麼是拉姆達?
- 11. 如何檢查該變量是拉姆達函數
- 12. C#拉姆達
- 13. 由拉姆達
- 14. 與拉姆達
- 15. DynamoDB驗證異常的拉姆達
- 16. 的Java 8拉姆達捕獲異常
- 17. 動態遞歸拉姆達表達式
- 18. 聲明拉姆達可以表達拉姆達
- 19. 分組拉姆達
- 20. 沒有拉姆達
- 21. 通過拉姆達
- 22. C#拉姆達(=>)
- 23. 分配拉姆達
- 24. 拉姆達表達事件
- 25. LINQ的兩步Func鍵一行拉姆達
- 26. 檢測拉姆達是否是這樣的方法參考
- 27. 拉姆達調用另一個外部拉姆達
- 28. asp.net核心通LINQ拉姆達查看
- 29. 在Python中的拉姆達檢查斷言
- 30. 擴展「WhenNull」檢查null並通過拉姆達
這是什麼情況,你不知道它是否? – musefan
@musefan當它是一個輸入框架的DLL –