I noticed that most of the methods awaited on had an Async suffix in their name. Is that some sort of modern hungarian notation, and is it even necessary? It also looks like you can't pass timeouts to await.
As for the timeouts, it would be strange to bake this into a language (different platforms may support different timers, at the very least).
Instead, you use library for this[1]:
int timeout = 1000;
var task = SomeOperationAsync();
if (await Task.WhenAny(task, Task.Delay(timeout)) == task) {
// task completed within timeout
} else {
// timeout logic
}
Instead of awaiting on a task, you await on `WhenAny` combinator.