await the response instead of using Task.Result

reading "Task.Result" is a synchronous wait.  "await" is an async wait.

My rule of thumb (I'm about 80% sure of this) is to avoid Task.Result in general even if it means turning a method that returns T into a method that returns async Task<T>.

A commandline app has a Program.Main() method that can't be async, so somewhere under that the program has to become async, and stop being async again, but the idea is to minimise the number of times that it crosses that boundary which I think incurs an overhead. Returning Task<T> is a syntax overhead, but tasks can be composed and awaited in batches if you have them.