How Asynchronous Methods Execute
await expressions are just expressions, you can use them in (almost) all places where you can use expressions. For example, it’s perfectly fine to write the following:
string res = await Bar(await Foo() + await Qux(), 42 * await Baz());
This code evaluates as if you had written the following:
var __t1 = Foo();var __t2 = await __t1;var __t3 = Qux();var __t4 = await __t3;var __t5 = __t2 + __t4;var __t6 = Baz();var __t7 = await __t5;var __t8 = 42 * __t7;var __t9 = Bar(__t5, __t8);string res = await __t9;
In this example, the containing asynchronous method can be suspended on no less than four occasions, corresponding to each of the
await expressions. However, the code still executes sequentially with a top-to-bottom ...