首页 > 解决方案 > 施法任务使用反射到 T

问题描述

使用方法属性,我得到一个IEnumerable<Delegate>. 我想调用每一个,现在我使用DynamicInvoke并得到结果。但是,有些方法可以是async和返回一个Task的东西。我真的不在乎那是什么,我只想使用 Newtonsoft 对其进行序列化。

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

我正在考虑检查返回类型是否实现TaskTask<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;
}
...

标签: c#asynchronousreflectioncastingsynchronous

解决方案


推荐阅读