Without using Action and Func you could use the MethodInvoker in the case of the void () delegate:
new MethodInvoker(Foo).BeginInvoke(null, null);
Also, it should be noted that if you use the BeginInvoke method you have to call EndInvoke when the delegate has completed execution.. so this line above will have to change to either use a callback or you need to keep a reference to the delegate.. Like so:
MethodInvoker mi = null;
IAsyncResult ar = null;
ar = (mi = new MethodInvoker(Foo)).BeginInvoke(null,null);
.. sometime later after the delegate has completed executing
mi.EndInvoke(ar);
This is true whenever you use BeginInvoke. So I guess in the end I wouldn't recommend using the BeginInvoke method..
@Steven's solution using the ThreadPool is a much better solution in my opinion.. and his oviously:)