Хорошо ли проверять отмену операции исключением?
От: _FRED_ Черногория
Дата: 03.09.10 14:00
Оценка:
Имеем мы некуо сложную операцию ("сложность" в том, что из главной функции вызывается несколько вспомагательных, из них — ещё несколько вспомагательных — развесистая такая операция), которая выполняется асинхронно и может быть отменена пользователем.

В дотнете есть целый Cancellation Framework на эту тему. Он предоставляет два способа обработки события отмены операции — вызов ThrowIfCancellationRequested и самостоятельная проверка IsCancellationRequested. Соответственно, обрабатывать событие отмены можно либо так:
  try {
    ChildOperation(<…>, token);
  } catch (OperationCancelledException) {
    <…>
  }//try

либо этак:
  ChildOperation(<…>);
  if(token.ThrowIfCancellationRequested) {
    <…>;
  }//if

Естественно, с исключениями код писать гораздо проще (не нужно писать различные проверки). Но вот не является ли использование исключений в данном случае следствием не действительно исключительной ситуации (мы же предусматриваем в программе отмену, то есть это вполне рабочий сценарий, которые мы технически можем обработать без исключений), а не частью програмной лигики, то есть не получается ли что мы "строим логику выполнения программы на исключениях"?

Интересно, что на эту же тему (отмена операций) есть в других платформах? Неужели что-то новое (по сравнению с тем, что сделали в Cancellation Framework)?
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.