This example shows the benefits of having first class functions.
For a good overview of the .net framework asynchronous design pattern take a look at this article.
Now forget all that stuff about hand coding everything yourself and take a look at this:
Yes, it is that simple. That's one of the good side effects of treating functions as object.
Add closures to the mix and its gets even simpler:
Of course you could also do it with instance methods: