Can anybody explain me what is the difference between the Begin[...]/End[...] asynchronous API pattern and the later [...]Async pattern in .NET 3.5?
For example, Socket.BeginAccept() and Socket.AcceptAsync().
Threads. Async methods are intended to be non-blocking operations. An await expression in an async method doesn't block the current thread while the awaited task is running. Instead, the expression signs up the rest of the method as a continuation and returns control to the caller of the async method.
Note: The purpose of async / await is to simplify the syntax necessary to consume promise-based APIs. The behavior of async / await is similar to combining generators and promises. Async functions always return a promise.
Note that most *Async
methods (with corresponding *Completed
events) are using the Event-Based Asynchronous Pattern. The older (but still perfectly valid) Begin*
and End*
is a pattern called the Asynchronous Programming Model. The Socket
class is an exception to this rule; its *Async
methods do not have any corresponding events; it's essentially just APM done in a way to avoid excessive memory allocations.
The biggest difference between APM and EBAP is the thread used for completion notification. APM will call back on a thread pool thread (unless the request completes synchronously). EBAP will use a cross-framework strategy to call back on a UI thread (if the operation was started from a UI thread).
However, both APM and EBAP are being replaced with a much more flexible approach based on the Task Parallel Library. Since the TPL can wrap APMs easily, older classes will likely not be updated directly; extension methods are used to provide Task
equivalents for the old APM methods.
Update 2012-07-14: I was wrong when I stated "older classes will likely not be updated directly". For performance reasons, the BCL/TPL teams decided to review each BCL type and add TAP methods directly instead of using extension methods. These changes will be in .NET 4.5.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With