ygo*_*goe 3 .net c# reflection async-await
我的代码执行此操作是为了在网络请求传入时调用已注册的方法。它是 RPC 系统的一部分。
Delegate method;
object result = method.DynamicInvoke(args);
Run Code Online (Sandbox Code Playgroud)
当该方法返回一个值时,一切都很好。但是,当它返回可等待的内容时,我对尝试将可等待的内容返回给网络调用者不感兴趣。他们不会使用它,而且它可能无论如何也无法转让。相反,我需要等待它然后返回实际结果。
我可以检查该方法的返回类型是否类似于Task. 或者一个Task<T>. 够了吗?宇宙中难道就没有其他值得期待的事情吗?我将如何测试该类型Task?我的意思是我不能只做这样的事情:
method.Method.ReturnType is Task
Run Code Online (Sandbox Code Playgroud)
这不会是真的。而且也没有:
method.Method.ReturnType.IsAwaitable
Run Code Online (Sandbox Code Playgroud)
我承认我不能等待一个async void方法。但其他任何最终可以等待的事情都应该等待。
可等待的内容是编译器知道的内容。您需要将其确定为您知道如何处理的类型。
尝试这样的事情:
object result = null;
if (method.Method.ReturnType.IsSubclassOf(typeof(Task)))
{
if (method.Method.ReturnType.IsConstructedGenericType)
{
dynamic tmp = method.DynamicInvoke(args);
result = tmp.GetAwaiter().GetResult();
}
else
{
(method.DynamicInvoke(args) as Task).GetAwaiter().GetResult();
}
}
else
{
result = method.DynamicInvoke(args);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1712 次 |
| 最近记录: |