Контрактное соглашение при реализации метода, который возвращает задание

Существует ли «передовая практика» или договорное соглашение с MS при реализации метода, который возвращает задание в отношении создания исключений? Это возникло при написании модульных тестов, и я пытался выяснить, нужно ли мне тестировать / обрабатывать это условие (я понимаю, что ответом может быть «защитное кодирование», но я не хочу, чтобы это был ответ).

то есть

Метод всегда должен возвращать задачу, которая должна содержать выброшенное исключение.

Метод должен всегда возвращать задачу, за исключением случаев, когда метод предоставляет недопустимые аргументы (т.е. ArgumentException).

Метод должен всегда возвращать Задачу, кроме случаев, когда разработчик становится мошенником и делает то, что он / она хочет (jk).

Task Foo1Async(string id){
  if(id == null){
    throw new ArgumentNullException();
   }

  // do stuff
}

Task Foo2Async(string id){
  if(id == null){
    var source = new TaskCompletionSource<bool>();
    source.SetException(new ArgumentNullException());
    return source.Task;
  }

  // do stuff
}

Task Bar(string id){
  // argument checking
  if(id == null) throw new ArgumentNullException("id")    

  try{
    return this.SomeService.GetAsync(id).ContinueWith(t => {
       // checking for Fault state here
       // pass exception through.
    })
  }catch(Exception ex){
    // handling more Fault state here.
    // defensive code.
    // return Task with Exception.
    var source = new TaskCompletionSource<bool>();
    source.SetException(ex);
    return source.Task;
  }
}

Ответы на вопрос(3)

Ваш ответ на вопрос