Асинхронное программирование C#

Все вокруг говорят о асинхронном программировании, мол это круто, быстро, удобно и тд. Увы, у меня всегда была лажа с асинхронным и параллельным программированием, посему прошу вас вкратце дать мне какие-то азы и по крайней мере относительно простым языком, как для чайника, объяснить мне чем конкретно как это использовать. Желательно с примерами кода, если не сложно. Может, какую-то прогу простенькую там скиньте, что б на примере понял суть асинхронки...

Здравствуй.

Итак, если, говоришь, с асинхронным программированием не айхти, давай для начала разберёмся что это такое вообще.

Зайду с далека. Есть такие штуки как синхронное и асинхронное программирование.

Когда ты просто создаёшь метод и вызываешь его в мейне - ты на самом деле создаёшь синхронный метод, тобишь, программируешь синхронно.

Вот тебе пример кода вызова синхронного метода:

class Program
    {
        static void Main(string[] args)
        {
            var myDel = new Action(Method);
        //Синхронный вызов метода:
        myDel.Invoke();
        for (int i = 0; i < 25; i  )
        {
            Thread.Sleep(100);
            Console.Write("second ");
        }
    }
    static void Method()
    {
        for (int i = 0; i < 25; i  )
        {
            Thread.Sleep(100);
            Console.Write("first ");
        }
    }
}</pre>

В данном примере ты видишь привычний нам всем делегат, в который мы закидываем метод и преспокойненько "будим" его, вызывая метод Method, ссылка на который хранится в нашем делегате. В результате имеем такой вывод:

Чётко видим, что первым вызывается наш делегат, а затем всё, что написано после него. Это и называется синхронным программированием, тобишь одно за другим.

А теперь давай попробуем сделать так, что б наши методы вызывались одновременно, тобишь, асинхронно. Для этого немного изменим наш код и закомментим то что нам не пригодится:

 class Program
    {
        static void Main(string[] args)
        {
            var myDel = new Action(Method);
        ////Синхронный вызов метода:
        //myDel.Invoke();

        //Асинхронный вызов метода:
        myDel.BeginInvoke(null, null);

        for (int i = 0; i < 25; i  )
        {
            Thread.Sleep(100);
            Console.Write("second ");
        }
    }
    static void Method()
    {
        for (int i = 0; i < 25; i  )
        {
            Thread.Sleep(100);
            Console.Write("first ");
        }
    }
}</pre>

Вот что у нас получается в результате:

Как видим, методы у нас вызывались одновременно (с одинаковым приоритетом). Тобишь процессор выполнял не одну задачу перед другой, а сразу 2 задачи одновременно. Это и называется асинхронным программированием.

Асинхронно - в контексте вторичного потока.

В данном случае был использован так называемый пул потоков, а не создавался экземпляр класса Thread и тд.

Так, это мы прояснили для себя что такое асинхронное программирование.

Рекоммендуем Вам просмотреть курс C# Professional для лучшего усвоения материала.