views:

143

answers:

2

Consider me rusty on the subject of asynchronous delegates.

If I want to call a method asynchronously, in a fire-and-forget style, is this an appropriate way to do it?

Action action = DoSomething;
action.BeginInvoke(action.EndInvoke, null);

The DoSomething() method catches all exceptions and deals with them internally.

Is the call to EndInvoke appropriate? Required?

Is there a clearer way to achieve the same behaviour?

+2  A: 

The new way (in .NET 4) is to do this:

Task.Factory.StartNew(() => DoSomething());
Andrew Hare
What about disposal of the Task object? I'd be interested in your opinion on [this question](http://stackoverflow.com/q/3734280/119738)
Simon P Stevens
+3  A: 

The "old-school" way in .NET 3.5 is to use the ThreadPool:

ThreadPool.QueueUserWorkItem(s => DoSomething());

If you prefer to use asynchronous delegates, then you should know that the call to EndInvoke is necessary, even if you don't have any additional code you wish to execute on callback.

Aaronaught
Your one line beats my two.
Programming Hero