Thread C# Tutorial

using System;
using System.Threading;
class MainClass{
    public delegate double MathFunctionToCall(double arg);
    
    public static void MathCallback(IAsyncResult iar)
    {
        MathFunctionToCall mc = (MathFunctionToCall) iar.AsyncState;
        double result = mc.EndInvoke(iar);
        Console.WriteLine("Function value = {0}", result);
    }
    public static void CallMathCallback(MathFunctionToCall mathFunc,double start,double end,double increment)
    {
        AsyncCallback cb = new AsyncCallback(MathCallback);
        
        Console.WriteLine("BeginInvoke: {0}", start);
        mathFunc.BeginInvoke(start, cb, mathFunc);
        start += increment;
    }
    public static void Main()
    {
        CallMathCallback(new MathFunctionToCall(Math.Sin), 0.0, 1.0, 0.2);
        Thread.Sleep(2000);
    }
}
BeginInvoke: 0
Function value = 0