Async Targeting Pack

[UPDATE: The async targeting pack has been renamed "Microsoft.Bcl.Async". It now supports async for portable libraries]


We’ve just released an "Async Targeting Pack” [update: replaced by Microsoft.Bcl.Async] via NuGet. It lets you use the async feature of VS11 for applications that target Silverlight5 or .NET4. (You don't need it if you're using VS11 to target .NET45).

We expect all users of VS2010+AsyncCTP to upgrade to VS11. That’s because VS11 implements the async feature fully, and is supported. By contrast the AsyncCTP has many known bugs in its implementation of async, is not supported, and is difficult to install.

We intend not to release any further versions of the AsyncCTP. For the sake of Azure and Windows Phone, however, we are keeping the AsyncCTP for VS2010 online for now [link]. It remains unsupported. Update: the new Microsoft.Bcl.Async works fine for Windows Phone.


I want to put in a note of appreciation to David Grunwald, Omer Mor and Alex Davies who released AsyncBridge while we were putting together the Async Targeting Pack. Great work!




Some reminiscences of the Async CTP

Now that the Async CTP can (almost) finally be laid to rest, here's a logo from it:

Mads Torgersen has two whiteboards in his office that hang from a picture-rail. Right at the very beginning of our first discussions on async, he wrote the word "await" in giant filled-in lettering on the boards and pushed the two halves apart to opposite ends of the wall. I used that to create the logo.


My favorite real-life Async anecdote comes from covert observations of Anders Heijlsberg in the Microsoft cafeteria checkout line. He ordereds burritos more days than not... (1) He walks to the burrito counter, makes an order, and gets a receipt. (2) He queues up at the cash register to pay for the receipt. (3) Then he goes back to the burrito folks who have by now finished preparing his meal. If that's not async in action, I don't know what is!

Dim receipt As Task(Of Burrito) = OrderBurritoAsync()
Await receipt


On another occasion, Mads was giving a talk about async to some group within Microsoft. He'd missed breakfast and was eating a banana at the podium, waving it about animatedly as he discussed async control flow. We called it his "async banana". It's an old Microsoft tradition to share chocolates, cakes and cookies with colleagues, so that evening I baked some "Async banana bread" and brought it into the office the next day. First workitem was a bug report from our QA team that Finally bodies were sometimes being executed twice inside async methods. So that evening I baked a second identical "Async banana bread" and brought it into the office as a dupe. (The bugfix on this occasion was so subtle that it left even Jon Skeet scratching his head for weeks!)


We just got word that the AsyncCTP has been downloaded over 50,000 times. That's a huge number of downloads for an experimental preview of a language feature. We're hugely glad to have had people use it, and give their feedback, and shape the final product. But it was just an experimental technology preview, and we're glad to finally have VS11 and the Async Targeting Pack as its replacement.