You absolutely want to use FromAsync
when an API offers a BeginXXX/EndXXX version of a method. The difference is that, in the case of something like Stream
or Socket
or WebRequest
, you’ll actually end up using async I/O underneath the covers (e.g. I/O Completion Ports on Windows) which is far more efficient than blocking multiple CPU threads doing a synchronous operation. These methods provide the best way to achieve I/O scalability.
Check out this section of the .NET SDK on MSDN entitled TPL and Traditional .NET Asynchronous Programming for more information on how to combine these two programming models to achieve async nirvana.