using System;
using System.Threading;
class AsyncDelegatesBlocked
{
public static int Add(int op1, int op2, out int result)
{
Thread.Sleep(3000);
return (result = op1 + op2);
}
public delegate int AddDelegate(int op1, int op2,out int result);
static void Main()
{
int result;
AddDelegate add = new AddDelegate(Add);
IAsyncResult iAR = add.BeginInvoke(6, 42, out result,null, null);
for (int i = 0; i < 10; i++)
{
Thread.Sleep(200);
Console.Write(".");
}
iAR.AsyncWaitHandle.WaitOne();
add.EndInvoke(out result, iAR);
Console.WriteLine("[Main] The result is {0}", result);
}
}