I thought I'd got my head around exceptions in async
methods, and WhenAll
/WhenAny
behaviour when tasks throw exceptions, but:
internal async Task RunAsync()
{
//...
//one of persistenceTask, monitorsTask is going to throw an exeption
var completedTask = Task.WhenAny(persistenceTask, monitorsTask);
await completedTask; //I expect this to throw but it doesn't
}
.
//in a calling method later
var t = await RunAsync();
When completedTask
has status faulted, I can see the inner exception in the debugger, but t
ends up as successfully completed. What I want is the exception to get thrown by RunAsync
- I know WhenAny
does not throw if a task faults, but I thought if I await
on a faulted task (completedTask
) this would throw.
What am I getting wrong?