TaskToAsyncResult
Provides methods for using Task to implement the Asynchronous Programming Model
pattern based on "Begin" and "End" methods.
Creates a new IAsyncResult from the specified Task, optionally invoking callback when the task has completed.