Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between [...]Async and Begin[...] .net asynchronous APIs

Can anybody explain me what is the difference between the Begin[...]/End[...] asynchronous API pattern and the later [...]Async pattern in .NET 3.5?

  • Why was the later created?
  • Why would one prefer one pattern over another?

For example, Socket.BeginAccept() and Socket.AcceptAsync().

like image 396
Pavel Radzivilovsky Avatar asked Jun 20 '10 21:06

Pavel Radzivilovsky


People also ask

What is difference between thread and async await in C#?

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.

What's the point of async await?

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.


1 Answers

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.

like image 98
Stephen Cleary Avatar answered Oct 05 '22 11:10

Stephen Cleary