当实现返回Task的方法时,是否有MS“最佳实践”或合同约定来处理抛出的异常?这在编写单元测试时会遇到,我想知道是否应该测试/处理此情况(我认识到答案可能是“防御性编程”,但我不希望那是答案)。
例如:
1. 方法必须始终返回一个包含抛出异常的Task。 2. 方法必须始终返回一个Task,除非该方法提供了无效的参数(即ArgumentException)。 3. 方法必须始终返回一个Task,除非开发人员偏离主题并随心所欲(开个玩笑)。
例如:
1. 方法必须始终返回一个包含抛出异常的Task。 2. 方法必须始终返回一个Task,除非该方法提供了无效的参数(即ArgumentException)。 3. 方法必须始终返回一个Task,除非开发人员偏离主题并随心所欲(开个玩笑)。
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;
}
}