When you use the Task-based Asynchronous Pattern (TAP) to work with asynchronous operations, you can use callbacks to achieve waiting without blocking.

// https://msdn.microsoft.com/en-us/library/hh873173(v=vs.110).aspx