As a general rule, synchronous wrappers around asynchronous methods are strongly discouraged. When you use the Result
approach, you run the risk of deadlock (as I describe on my blog); also, Result
will wrap any exceptions, which makes your error handling much trickier.
So I'd say "don't do that."
As far as the Async CTP goes, there are a number of bugs that are known to exist (plus several more that are not public). And they're not going to be fixed. I strongly recommend upgrading everyone to VS2012.
For this particular issue, it may be performance-related. E.g., Task.Delay(1)
returns a task that will complete almost immediately, so there's a race condition between starting the delay and the await
which checks whether the task is already complete. So it's possible that performance improvements in the official Microsoft.Bcl.Async
are causing the difference in behavior.