Tasks throw exceptions when they can’t complete successfully. The client code catches those exceptions when the await
expression is applied to a started task.
When a task that runs async
throws an exception, that task is faulted. The Task
object holds the exception thrown. Faulted tasks throw an exception when the await
expression is applied to the task.