I've been trying to write some code and struggling to find continuous blocks of time to do it in. However, something that I keep coming across is a scenario where I want to wrap up some code that already has an asynchronous nature and keep the asynchronous nature of it. To try and explain what I'm on about...Imagine that you're writing some code that is largely based around a FileStream . Perhaps we're trying to write some class that offers up 64K of data from a FileStream at a time (yes, I know, it's pointless but my real example's more complicated). If we're trying to do that we might write some code something like; public class MyReader { public static IAsyncResult BeginRead( string path, byte [] array, AsyncCallback callback, object state) { return ( null ); } public static int EndRead(IAsyncResult result) { return (0); } private static void OnReadCompleted(IAsyncResult result) { } } In our BeginRead function we need to use the FileStream to start an asynchronous read and then in our EndRead we need to surface...