Согласно RTFM, я не должен использовать Exception
непосредственно для броска. При перефакторинге кода я изменил большинство из них на
InvalidOperationException
если вызов метода неадекватен (неправильные предпосылки, время, состояние и т.д.);TimeoutExeption
когда есть тайм-аут;ArgumentException
(и related - ArgumentNullException
и ArgumentOutOfRangeException
), когда метод вызывается с неправильными параметрами;Тем не менее, я пытался выяснить, какое исключение наиболее подходит, когда метод выполнил половину операции (так что параметры и состояние были в порядке), но затем возникает проблема (в моем случае это сообщение с внешним устройством, когда оно внезапно сообщает об ошибке "omg")).
Какое стандартное исключение я должен использовать (я не хочу получать свой собственный) в случае промежуточного или окончательного исключения? Не должно быть сложного вопроса, но...
Это зависит от ситуации. Если это веб-служба (или, возможно, веб-сайт), вы можете выбросить 500 внутренних ошибок сервера.
В моей службе С# wcf в некоторых случаях я делаю следующее:
throw new System.ServiceModel.Web.WebFaultException<string>(
"Descriptive error message",
System.Net.HttpStatusCode.InternalServerError);
DeviceCommunication..
появятся исключения);) Так что нет ничего более-менее по умолчанию ?InvalidOperationException
действительно подходит (для пользователя метода причиной является неправильный вызов, в то время как устройство не было на 100% работоспособным , его проблемы есть). :)