Let's say I have an Interface:
interface A { string Do(); } and then I implement this interface in a class. The implementation requires some async operations. Something like the following:
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"))); } } } What is the proper way to return, to the external calling code, the first exception that occurs in the async operations chain? Is the following a good approach?
public string Do() { try { return Task1().Result; } catch (AggregateException ex) { Exception inner = ex; while(inner.InnerException != null) { inner = inner.InnerException; } throw inner; } }