Write code that looks like synchronous but actually executes asynchronously with the PowerThreading library and the AsyncEnumerator
class.
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 Wintellect website.
I will start, again, with some code that executes synchronously:
private void FetchStockQuotesSync(WebService svc)
{
IStockQuote qt = svc.FetchStockQuotes();
}
Fortunately the WebService
class implements the IAsyncResult interface, so the same code can be executed asynchronously using the AsyncEnumerator
class:
AsyncEnumerator ae = new AsyncEnumerator();
ae.BeginExecute(GetStockQuotesAsyncEnumerator(ae, svc), ae.EndExecute);
private static IEnumerator<Int32> GetStockQuotesAsyncEnumerator(
AsyncEnumerator ae, WebService svc)
{
svc.BeginGetStockQuotes(ae.End(), null);
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
discussion group.
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.