如何确定方法在运行时是否异步

Jam*_*ock 6 delegates winforms async-await

我有一个遗留项目,有一个Winforms事件的数百个方法签名.显然当前我不想去做BeginInvoke/EndInvoke,因为这会导致UI交叉线程问题.

但是我需要(因为死锁)能够将这些签名标记为异步以处理我们必须能够执行的一些异步命令.除了死锁之外别无他法.

我可以使用BeginInvoke成功调用该事件,并且它可以正常工作并且正确运行asyncs等.但是这会将其分解为另一个线程并打破我们不希望经历的旧实现并使异步和Invoke知道.

所以我正在调查使用event.GetInvokationList()并循环并分别调用每个.如果方法是异步的,则开始/结束调用.否则在UI线程上直接调用它.

我唯一的问题是我无法通过反射找到任何方法来判断方法签名是否异步.

任何人都知道如何从MethodInfo或GetInvokationList()值中的其他方法判断方法是否异步?

谢谢!

小智 3

如果您使用 .net 4.5,请尝试“AsyncStateMachineAttribute”。 http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.asyncstatemachineattribute.aspx