title: Async await vs GetAwaiter().GetResult() and callback
body: <p>I am trying to find the best practice for one of my project. It is a typical WPF application with a UI that displays a list of items and there is a data service that returns the result.</p>
  
  <p>We are calling the service asynchronously so as to not block the UI. We have 2 options in front of us:</p>
  
  <ol>
  <li><p>Using Async await keywords
  This requires marking all the methods Async from button click all the way to service layer (class on client side that makes the http call to the server) and any method in between. This approach works fine other then the issue of propagating async everywhere</p></li>
  <li><p>Use awaiter and callback
  In this approach the UI client calls the service layer and passes a callback to the service layer, the service layer wraps the http call to the server in a task and use GetAwaiter().GetResult(), when the http call is finished it invokes the callback passed by the UI client. In this case no method has to marked async, but not really sure about the use of GetAwaiter()</p>
  
  <p>Task.Run(async () => //await http call, invoke   callback).GetAwaiter().GetResult();</p></li>
  </ol>
  
  <p>I am just trying to find out which is a better approach and if there are some issues with either approach that I should be aware of</p>