Monday, January 20, 2014

How to make asynchronous method call in C#

I created an application wherein I needed to call a method and forget it; the called method will perform several operations in background. I don’t want to wait for all the operation to be completed and then proceed. I wanted to call the method to perform the operations in background and meanwhile I can proceed with other operations.

There are various ways the above problem can be solved; however I wanted to go with asynchronous method call which is demonstrated below with code example:-

Demo Console Application: Programm.CS class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MethodA();

            Console.ReadKey();
        }

        private static void MethodA()
        {
            Console.WriteLine("Method A Execution Started");

            DemoAsyncMethodCall.Capture("Call from Method A");

            MethodB();

            Console.WriteLine("Method A completed");

        }

        private static void MethodB()
        {
            Console.WriteLine("Inside Method B");
        }
    }
}


Demo Console Application: DemoAsyncMethodCall.CS class

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;

namespace ConsoleApplication1
{
    public class DemoAsyncMethodCall
    {
        delegate void MethodDelegate(string message);
       
        public static void Capture(string message)
        {
            MethodDelegate dlgt = new MethodDelegate(saveData);

            IAsyncResult ar = dlgt.BeginInvoke(message, null, null);
        }
       
        private static void saveData(string message)
        {
            Console.WriteLine("Aync method call saveData with message: " + message);
        }
               
    }
}


Demo Console Application:  Output