gpt4 book ai didi

c# - 什么时候等待动态调用的方法?

转载 作者:行者123 更新时间:2023-12-02 20:22:29 25 4
gpt4 key购买 nike

当网络请求进入时,我的代码执行此操作以调用已注册的方法。它是 RPC 系统的一部分。

Delegate method;
object result = method.DynamicInvoke(args);

当方法返回一个值时,一切都很好。但是当它返回可等待的东西时,我对尝试将可等待的东西返回给网络调用者不感兴趣。他们不会使用它,而且它可能无论如何也不可转让。相反,我需要等待它然后返回实际结果。

我可以检查方法的返回类型是否类似于 Task .或者 Task<T> .够了吗?难道天地间就不能有其他值得等待的东西吗?我将如何测试类型 Task ?我的意思是我不能只做这样的事情:

method.Method.ReturnType is Task

这不会是真的。而且也没有:

method.Method.ReturnType.IsAwaitable

我承认我无法等待 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);
}

关于c# - 什么时候等待动态调用的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com