Write code that looks like synchronous but actually executes asynchronously with the PowerThreading library and the
In my previous post I discussed about the new language features that will help the developers write asynchronous code easily without
having to split their flow in callback methods. In this post I want to show you an alternative way of doing this using the
AsyncEnumerator class. This works
for .NET 2.0+ and it is very similar with the upcoming features.
AsyncEnumerator class resides in the PowerThreading library. It is written by Jeffrey Richter and can be obtained from
the build better software, faster through a concentration on .NET and Windows technologies." href="http://www.wintellect.com/" target="_blank">Wintellect website.
I will start, again, with some code that executes synchronously:
private void FetchStockQuotesSync(WebService svc)
IStockQuote qt = svc.FetchStockQuotes();
WebService class implements the IAsyncResult interface, so the same code can be executed asynchronously using the
AsyncEnumerator ae = new AsyncEnumerator();
ae.BeginExecute(GetStockQuotesAsyncEnumerator(ae, svc), ae.EndExecute);
private static IEnumerator<Int32> GetStockQuotesAsyncEnumerator(
AsyncEnumerator ae, WebService svc)
yield return 1;
IStockQuote qt = svc.EndGetStockQuotes(ae.DequeueAsyncResult());
This technique is similar to the new language features for asynchronous programming. In fact, what I've discussed works from .NET 2.0 up to any future version.
A very interesting topic regarding the AsyncEnumerator class and the Async CTP can be found at the PowerTheading
Until the Async CTP is shipped you can benefit from what already exists. I have been using the AsyncEnumerator class for quite a long time and I am very happy with it. However, the Async CTP looks promising but it would be very interesting to see some performance measurements in the future.
The sample application can be found here.