使用反射将Task <T>强制转换为T

时间:2019-06-03 18:18:40

标签: c# asynchronous reflection casting synchronous

使用方法属性,我得到一个IEnumerable<Delegate>。我想给每个人打电话,现在我使用DynamicInvoke并得到结果。但是,某些方法可以是async并返回Task的值。我真的不在乎那是什么,我只想使用Newtonsoft对其进行序列化。

如何处理同步和异步方法?

我当时正在考虑检查返回类型是实现Task还是Task<T>,但是由于我不知道T,因此我不确定这样做是否是一个好方法

现在,我的代码不支持异步方法,如下所示:

protected string Invoke(Delegate method, params object[] args) {
   return JsonConvert.SerializeObject(method.DynamicInvoke(args));
}

protected void onRequest(Request request) {
   // Some logic
   Send(Invoke(request.Method, request.Arguments));
}

方法如下:

[RequestHandler("sell")]
private async Task<SellResponse> Sell(SellItemRequest request) {
   // Some asynchonous logic
   var response = new SellResponse {
      sucess = true,
      price = request.Price
   };
   return response;
}

[RequestHandler("buy")]
private BuyResponse Buy(BuyItemRequest request) {
   // Some logic
   var response = new {
      sucess = true,
      price = request.Price
   };
   return response;
}
...

0 个答案:

没有答案