No - at least unreasonable. async is just an annotation for the source code to tell the C # compiler that you really want an asynchronous function / anonymous function.
You can get the MethodInfo for the delegate and check if it has the corresponding attribute applied to it. I personally would not want this - the need to know is the smell of design. In particular, consider what happens if you re-process most of the code from a lambda expression into another method, and then use:
Action a = () => CallMethodAsync();
At this point, you do not have an asynchronous lambda, but the semantics will be the same. Why do you want any delegate code to behave differently?
EDIT: this code works, but I highly recommend against it:
using System; using System.Runtime.CompilerServices; class Test { static void Main() { Console.WriteLine(IsThisAsync(() => {}));
Jon skeet
source share