async/await adoption

Removed all Task.Run calls to sync API. This just creates a new thread
that then sits and waits, which is not ideal. Used async/await instead
which does not require extra threads.