If I want to read or write a file I could use stream.BeginRead and stream.EndRead, but that requires callbacks and a LOT of ugly, complicated code using the asynchronous programming model.
Why would I want to use these asynchronous IO methods (that use the .NET threadpool behind the scenes) than write the same code in a synchronous style, and pass that to the thread pool. (Rather than chopping up my method with the callbacks.)
Update:
Some (good) responses indicate that using the APM saves me from creating a thread - which I agree with since new threads each have their own 2MB stack. But where does the 'BeginRead' and 'Endread' execute? The threadpool? Is reusing a thread which has already been allocated the only benefit?