Сценарий RPC поверх очередей сообщений - поскольку базовый механизм является асинхронным, клиенты должны указать, сколько времени они хотят ждать ответа, прежде чем истечет время ожидания.Как клиент, какой из этих двух фрагментов кода вы бы предпочли использовать?
Самое главное: как пользователь метода GetResponseTo (), , почему вы бы предпочли один другому?Как ваш выбор делает ваш код более расширяемым, более читабельным, более тестируемым и т. Д.?
try
{
IEvent response = _eventMgr.GetResponseTo(myRequest, myTimeSpan);
// I have my response!
}
catch(TimeoutException te)
{
// I didn't get a response to 'myRequest' within 'myTimeSpan'
}
ИЛИ
IEvent myResponse = null;
if (_eventMgr.GetResponseTo(myRequest, myTimeSpan, out myResponse)
{
// I got a response!
}
else
{
// I didn't get a response... :(
}
Для вашей информации, вот текущийреализация GetResponseTo ():
public IEvent GetResponseTo(IEvent request, TimeSpan timeout)
{
if (null == request) { throw new ArgumentNullException("request"); }
// create an interceptor for the request
IEventInterceptor interceptor = new EventInterceptor(request, timeout);
// tell the dispatcher to watch for a response to this request
_eventDispatcher.AddInterceptor(interceptor);
// send the request
_queueManager.SendRequest(request);
// block this thread while we wait for a response. If the timeout elapses,
// this will throw a TimeoutException
interceptor.WaitForResponse();
// return the intercepted response
return interceptor.Response;
}