【发布时间】:2020-11-10 09:46:18
【问题描述】:
我想使用async await 调用通用Delegate。我没有使用预构建的委托,而是使用通用的 Delegate 类,它可以接收作为对象数组的参数。
我正在做这样的事情:
public object InvokeAction(Delegate action, object[] actionArgs = null)
{
if(action == null)
{
return null;
}
return action.DynamicInvoke(args);
}
我想要做的是提供一个使用await 运行委托的选项,但由于DynamicInvoke 返回一个对象,它没有awaiter。
有没有办法定义一个通用委托并进行异步调用?如果不是通用的,是否有一些接近通用委托的版本(可以强制用户使用某些委托定义)可以按照我想要的方式调用?
【问题讨论】:
-
那个
action代表——这实际上是异步的,即它是否返回一个Task? -
你能分享一个要调用的方法的例子吗?我希望您知道只是因为您等待某些东西不会使该异步。
-
该操作可以是常规同步调用的任何内容。在异步调用的情况下,我试图检查我是否仍然可以使用相同的通用委托,或者我必须定义一个返回任务并强制用户使用它的委托
-
我会建议第二种方法
InvokeActionAsync。无论如何,你不需要强制用户使用那个,他们当然可以在没有await的情况下调用你的异步方法。
标签: c# asynchronous async-await delegates