Async in c# (.Net Framework)

Here I am presenting the idea about time efficient execution.

Two methods are declared as ‘async’

First method requires 5 seconds time to finish execution, another one requires 8 seconds.

Two cases i have covered here with two button click events. First approach takes longer time(with await keyword) while second one finishes quickly as separate tasks defined hence their thread DOES NOT BLOCK main thread.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading.Tasks;

public partial class RnD_AsyncIdea : System.Web.UI.Page
{
public string Result = “”;

protected void Page_Load(object sender, EventArgs e)
{

}

//Time Required=5 Seconds work
private async Task DoSubTask1()
{
    await Task.Delay(5000);
    Result += "<br/>" + DateTime.Now + "|" + "task1 done.";
}

//Time Required=8 Seconds work
private async Task DoSubTask2()
{
    await Task.Delay(8000);
    Result += "<br/>" + DateTime.Now + "|" + "task2 done...";
}

//CASE-1
//Job finishing in same order its called
//TOATL TIME=5+5+8=18 
protected async void btnCase1_Click(object sender, EventArgs e)
{
    Result += "<br/>" + DateTime.Now + "|" + "Starting Main Job";
    await DoSubTask1();     //await keywork will hold on execution untill method finished
    await DoSubTask2();
    await DoSubTask1();
    Result += "<br/>" + DateTime.Now + "|" + "Finished Main Job";
    Response.Write(Result);

    /*
    07/07/2023 13:43:07|Starting Main Job
    07/07/2023 13:43:13|task1 done.
    07/07/2023 13:43:21|task2 done...
    07/07/2023 13:43:26|task1 done.
    07/07/2023 13:43:26|Finished Main Job 
    */
}

//CASE-2
//Job finishing in 
//TOATL TIME=8 only
protected async void btnCase2_Click(object sender, EventArgs e)
{
    Result += "<br/>" + DateTime.Now + "|" + "Starting Main Job";

    Task task1 = DoSubTask1();      //NO await, so cursor will move ahead
    Task task2 = DoSubTask2();
    Task task3 = DoSubTask1();

    await Task.WhenAll(task1, task2, task3);

    Result += "<br/>" + DateTime.Now + "|" + "Finished Main Job";
    Response.Write(Result);

    /*
    07/07/2023 13:44:10|Starting Main Job
    07/07/2023 13:44:15|task1 done.
    07/07/2023 13:44:15|task1 done.
    07/07/2023 13:44:18|task2 done...
    07/07/2023 13:44:18|Finished Main Job 
    */
}

}

Leave a comment