An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
when the caller calls MakePurchase() it returns a task when it execute the first await. if the caller of MakePurchase() does not use await, continuation routine or .Wait() then it will not know when the task completed.
var task = MakePurchase(...);
dosomething1(); // MakePurchase has not called messenger yet
dosomething2(); // unknown state
task.Wait(); // will block thread until task completed calling messenger2()