Page tree
Skip to end of metadata
Go to start of metadata

الگوی Async/Await شباهت زیادی به Task در #C دارد. مزیت اصلی این الگوی جدید، wait نشدن Thread در مواردی مانند دسترسی به دیسک یا شبکه است.

مثال زیر تفاوت این دو را نشان میدهد:

static void Main(string[] args)
{
    Console.WriteLine("Program Begin");
    // DoAsTask();
    DoAsAsync();
    Console.WriteLine("Program End");
    Console.ReadLine();
}

static void DoAsTask()
{
    Console.WriteLine("1 - Starting");
    var t = Task.Factory.StartNew<int>(DoSomethingThatTakesTime);
    Console.WriteLine("2 - Task started");
    t.Wait();
    Console.WriteLine("3 - Task completed with result: " + t.Result);
}

static async void DoAsAsync()
{
    Console.WriteLine("1 - Starting");
    var t = Task.Factory.StartNew<int>(DoSomethingThatTakesTime);
    Console.WriteLine("2 - Task started");
    var result = await t;
    Console.WriteLine("3 - Task completed with result: " + result);
}

static int DoSomethingThatTakesTime()
{
    Console.WriteLine("A - Started something");
    Thread.Sleep(1000);
    Console.WriteLine("B - Completed something");
    return 123;
}

خروجی این برنامه به صورت زیر خواهد بود:

DoAsTask Output:
Program Begin
1 - Starting
2 - Task started
A - Started something
B - Completed something
3 - Task completed with result: 123
Program End

منبع:

http://stackoverflow.com/questions/9519414/whats-the-difference-between-task-start-wait-and-async-await

  • No labels