在我的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
}
兩個問題:
我需要重複之內的兩次發送方式,我的代碼?或者可以打另一個?
而不是有兩個發送方法可以有一個方法與布爾「sendAsync」? 我不知道是否因爲返回類型這有意義將是相同的...
改變你的界面返回'任務' –
SLaks
你有什麼具體問題?爲什麼你的案例與其他任何異步方法不同? – usr
所以我只需要添加任務到我的界面和我的類方法?我問這是因爲我的想法是這樣的:TReply發送(查詢查詢,布爾async = false)...所以這樣我就決定何時使用asyn或不。不能這樣做嗎? –