Все вокруг говорят о асинхронном программировании, мол это круто, быстро, удобно и тд. Увы, у меня всегда была лажа с асинхронным и параллельным программированием, посему прошу вас вкратце дать мне какие-то азы и по крайней мере относительно простым языком, как для чайника, объяснить мне чем конкретно как это использовать. Желательно с примерами кода, если не сложно. Может, какую-то прогу простенькую там скиньте, что б на примере понял суть асинхронки...
Здравствуй.
Итак, если, говоришь, с асинхронным программированием не айхти, давай для начала разберёмся что это такое вообще.
Зайду с далека. Есть такие штуки как синхронное и асинхронное программирование.
Когда ты просто создаёшь метод и вызываешь его в мейне - ты на самом деле создаёшь синхронный метод, тобишь, программируешь синхронно.
Вот тебе пример кода вызова синхронного метода:
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 и тд.
Так, это мы прояснили для себя что такое асинхронное программирование.