async/await

Ці методи дозволяють винести блок коду з основного потоку, аби програма не зависала, поки очікуються данні, наприклад з БД чи великого файлу

     1. Не можна використовувати ref, out

     2. await-ів може бути кілька

     3. Асинхронний метод може повертати void, Task

     4. Наступні команди очікують на завершення await-методу

        static void DoApart()  // Асинхронне завдання

        {

            Thread.Sleep(4000);

            Console.WriteLine("Finish");

        }

        static async void F1Async()  // Асинхронний

        {

            Console.WriteLine("DoApart start"); 

            await Task.Run(() => DoApart());   // Зачекати, Task.Run() - виклик асинхронної функції           

            Console.WriteLine("DoApart end");

        }

        static void Main(string[] args)

        {

            F1Async();   // запуск асинхронного методу в окремому потоці

            Console.WriteLine("Головний потiк продовжує роботу!");

            Console.Read();

        }

DoApart start

Головний потiк продовжує роботу!

// через 5 с

Finish 

DoApart end