This is known as the Asynchronous Programming Model (APM) and is associated with the IAsyncResult pattern.
Asynchronous calls are made using Begin and End methods on an API, with callbacks and state being passed between them.
Exceptions can be thrown from BeginRead (such as trying to read from a stream that has already been closed). Unexpected errors occurring during the async request (e.g. I/O error when reading a file), occur on the thread pool thread and will throw an exception when calling EndRead.