In order for a native desktop application to be responsive, I mean, not to freeze whilst sending a request over the network or processing a heavy CPU operation, these operations have to run in a separate thread.
Powerful features, comfortable to develop with but it's important to know how they work behind scenes. Otherwise you could get in trouble with deadlocks and invalid operation exceptions.
Our teammate Modesto San Juan recommended the book "Async in C# 5.0" by Alex Davies (@alexcode), and I found it great. I've created a tiny sample app to summarize the things I've learned from the book:
Sample app: https://bitbucket.org/carlosble/asyncawait - Look at MainWindow.xaml.cs file.
The app is just a window with a bunch of buttons and a text field. Every button has an event handler in the MainWindow.xaml.cs that exercises each use case.
The method names in that file along with some comments, explain the most remarkable features for our team right now.
Most of the stuff in Alex's book is very well summarized in this presentation by Alex Casquete (@acasquete) & Lluis Franco (@lluisfranco) :