Yes it is possible to get a return value when using async methods. So if we had a method such as ..
private string Foo()
and a delagate like this ..
public delegate string MyDelegate();
You can use code like this to get the result.
MyDelegate del = new MyDelegate();
IAsyncResult res = del.BeginInvoke();
string result = delFoo.EndInvoke(res);