В моем приложении 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
}
UPDATE: Учитывая предложение я добавил:
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
}
ДВА ВОПРОСА:
мне нужно повторить свой код в обоих Отправить методы ли? Или можно позвонить другому?
Вместо двух методов отправки можно ли использовать один метод с логическим «sendAsync»? Я не уверен, если это имеет смысл, поскольку возвращаемый тип будет то же самое ...
Изменить интерфейс для возврата 'Задача' –
SLaks
Какая у вас конкретная проблема? Почему ваш случай отличается от любого другого метода async? – usr
Так что мне нужно только добавить задачу к моему интерфейсу и методу моего класса?Я спросил это, потому что моя идея состояла в том, чтобы иметь что-то вроде: TReply Отправить (Запрос запроса, Boolean async = false) ... Таким образом, я бы решил, когда использовать asyn или нет. Разве это не может быть сделано? –