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 –