A callback is called when the operation is completed, so you can call End * and get a return value or exception, if any. asyncState is just the value to match in the callback if you use the same callback method in multiple places. Here is a description of the Async design pattern - http://msdn.microsoft.com/en-us/library/aa719595(VS.71).aspx
If you are creating a GUI application, consider using a different version - * Async method, which is created for each operation. It provides thread synchronization.
source share