.NET supports a design pattern for asynchronous programming. This pattern is present in many places in .NET (including I/O operations, as noted earlier and as we will see in Chapter 15). Asynchronous programming provides a way for you to provide a method call without blocking the method caller. Within your own code, the asynchronous model may provide an easier approach than threading, but offers much less control over the synchronization than using synchronization objects.
The Asynchronous Design Pattern
This design pattern is composed of two special methods exposed by a delegate object and the interface IAsyncResult. The two special methods, BeginInvoke and EndInvoke, are emitted directly by the compiler, and not implemented ...