在我的 NET 4.5 应用程序上,我有一个服务层。
我使用调度程序发送查询和接收回复:
示例:GetPostByIdQuery 由 GetPostByIdHandler 处理并返回 GetPostByIdReply。
如何更改我的代码以便以异步方式处理查询?
public class Dispatcher : IDispatcher {
public TReply Send<TReply>(Query query) where TReply : Reply, new() {
Type type = typeof(IQueryHandler<,>).MakeGenericType(query.GetType(), typeof(TReply));
IQueryHandler handler = (IQueryHandler)ObjectFactory.GetInstance(type);
try {
return (TReply)handler.Handle(query);
} catch (Exception exception) {
ILogger logger = ObjectFactory.GetInstance<ILogger>();
logger.Send(exception);
if (Debugger.IsAttached) throw;
return new TReply { Exception = exception };
}
} // Send
}
更新:考虑到我添加的建议:
public interface IDispatcher {
TReply Send<TReply>(Query query) where TReply : Reply, new();
Task<TReply> SendAsync<TReply>(Query query) where TReply : Reply, new();
} // IDispatcher
public class Dispatcher : IDispatcher {
public TReply Send<TReply>(Query query) where TReply : Reply, new() {
} // Send
public Task<TReply> Send<TReply>(Query query) where TReply : Reply, new() {
} // Send
}
两个问题:
我需要在两个 Send 方法中重复我的代码吗?或者一个可以打电话给另一个?
除了有两个发送方法,我可以有一个带有布尔“sendAsync”的方法吗?我不确定这是否有意义,因为返回类型是相同的......