Разработка API для тайм-аутов: TimeoutException или логический возврат без параметра out?C#

Место общения программистов C#
Ответить
Anonymous
 Разработка API для тайм-аутов: TimeoutException или логический возврат без параметра out?

Сообщение Anonymous »

Сценарий — 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;
}


Подробнее здесь: https://stackoverflow.com/questions/824 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»