Используя атрибуты метода, я получаю 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;
}
...