Q:

Understand the alternatives for calling methods asynchronously in .NET

What's the difference between calling .NET methods asynchronously by using:

BeginInvoke/EndInvoke

vs.

IAsynchResult

vs.

Specific object asynchronous methods (WebClient, for example)

I assume the difference between the first two and the third one is that some objects (WebClient in this case) natively support asynchronous calling via dedicated methods, so there's no need to use the BeginInvoke or IAsynchResult approaches?

A:

The first two approaches actually go hand-in hand. The BeginInvoke method returns an IAsyncResult which you later use for a call to EndInvoke later. The third method hides a lot of this complexity by allowing you to give it a delegate to call when it has completed its task (usually a bit easier to use).

