假设我有一个接口:
interface A {
string Do();
}
然后我在一个类中实现这个接口。该实现需要一些异步操作。类似于以下内容:
class B : A {
public string Do() {
return Task1().Result;
}
private async Task<string> Task1() {
var str = await Task2();
return str + "task1";
}
private async Task<string> Task2() {
using (WebClient client = new WebClient())
{
return System.Text.Encoding.UTF8.GetString(await client.DownloadDataTaskAsync(new Uri("http://test.com")));
}
}
}
将异步操作链中发生的第一个异常返回给外部调用代码的正确方法是什么?以下是一个好方法吗?
public string Do() {
try {
return Task1().Result;
} catch (AggregateException ex) {
Exception inner = ex;
while(inner.InnerException != null) {
inner = inner.InnerException;
}
throw inner;
}
}