Уроки C# - операторы async await - Урок 15

Поділитися
Вставка
  • Опубліковано 7 кві 2019
  • Донаты и на кофе ➜ t.me/win10tweaker/171
    Эксклюзив для спонсоров ➜ / xpuct
    Если недоступна спонсорка ➜ vk.cc/ctNjM7
    Выполнить асинхронно:
    pastebin.com/raw/BBvfT7fC
    Основной канал:
    / jailbreakvideo
    #async #await #Task #Thread #СиШарп
  • Наука та технологія

КОМЕНТАРІ • 371

  • @user-zd6di5mq9z
    @user-zd6di5mq9z 5 років тому +160

    Боже, где ты был, когда я все это изучал. Так хорошо разжевал. Мне днями на пролет приходилось в документации копаться, задачу сделал, но так и не понял нормально, как оно работает. А тут вот как оно просто. Блин круто делаешь.

    • @user-lo1lh2nv6p
      @user-lo1lh2nv6p 4 роки тому

      Как успехи в обучении??)

    • @user-ws6us6qq9k
      @user-ws6us6qq9k 4 роки тому

      Как идет развитие?, уже 10 месяцев прошло

    • @user-zd6di5mq9z
      @user-zd6di5mq9z 4 роки тому +8

      Если честно, для 10 месяцев в шарпе продвинулся не так сильно, как бы мог. Да не испытываю проблем в написании проектов на wpf mvvm или чего-то простого на asp mvc, но думается мне, за такой срок уже работу найти можно было бы, а я так и на собеседование не сходил.
      Так что развитием своим шарповским не удовлетворен, на несколько месяцев вообще перешел на питон и Vue js, даже сейчас пишу на питоне чаще.
      Главная ошибка, которую я совершил, это неадекватно начал стараться по учебе, что привело в конце семестра к полному нежеланию что-либо делать, в этом семестре пока все ок, успел написать пару проектов для резюме, лениво так вот продвигаюсь.
      Спасибо, что спросили, Господа.
      (Блин, вы напомнили мне это, теперь мне стыдно за зря потраченное время)

    • @user-ws6us6qq9k
      @user-ws6us6qq9k 4 роки тому

      @@user-zd6di5mq9z Что значит в твоем понимании *неадекватно старался*?

    • @user-zd6di5mq9z
      @user-zd6di5mq9z 4 роки тому +2

      ​@@user-ws6us6qq9k, приходил после учебы домой и учился еще там до поздна, меня что-то торкнуло и я решил сдать все лабы очень быстро.
      А неадекватно это для меня, т.к. обычно я сдаю все ближе к концу семестра, спокойно, не торопясь (ну как все короче).
      Сначала было классно, за пару месяцев избавиться от части предметов, мне нравилось это ощущение, но я мало того, что не смог поддерживать такую скорость дальше, так я еще и сдулся и вообще не хотел ничего.
      Теперь стараюсь дозировать нагрузки и мешать его с отдыхом.

  • @t3m4ch54
    @t3m4ch54 5 років тому +75

    Эти 20 минут были лучшие за последнее время.

    • @user-ix8lh7ou3u
      @user-ix8lh7ou3u 4 місяці тому

      подписываюсь под каждым словом!

  • @Jalaveyan
    @Jalaveyan 5 місяців тому +10

    Лучшее обьяснение работы async/await, что я видел.

  • @user-qc1sw4fz5w
    @user-qc1sw4fz5w Місяць тому +4

    Это был лучший урок по async, await который я видел. Спасибо!

  • @Porosti
    @Porosti 29 днів тому +2

    Ты лучший! В отличии от других тебя реально интересно смотреть!

  • @leonbishop7404
    @leonbishop7404 4 роки тому +19

    "Сразу говорю: где-нибудь, что-нибудь, я не знаю"
    в рамочку поставлю у себя в комнате.

    • @leonbishop7404
      @leonbishop7404 4 роки тому +3

      повешу даже. на стену.

  • @Max1GameChannel
    @Max1GameChannel 2 роки тому +29

    13:20
    button1.Left++;
    Если нужно по Y то button1.Top++;
    MSDN:
    Используйте Location свойство, чтобы одновременно задать координаты X и Y элемента управления. Чтобы задать расположение по отдельности, используйте Left подсвойство (X) или Top (Y) элемента управления. Не пытайтесь неявно задать координаты X и Y Point структуры, представляющей расположение кнопки, так как эта структура содержит копию координат кнопки.

    • @SAYREXPlay
      @SAYREXPlay 2 роки тому

      Так? Верно?
      async void Method()
      {
      while (button1.Left < 700)
      {
      button1.Left++;
      await Task.Delay(1);
      }
      }

    • @Max1GameChannel
      @Max1GameChannel 2 роки тому +1

      @@SAYREXPlay угу

    • @SAYREXPlay
      @SAYREXPlay 2 роки тому

      @@Max1GameChannel спасибо

  • @siriusawp3712
    @siriusawp3712 5 років тому +50

    17:10 ну while (true) же

  • @svyatoslav4043
    @svyatoslav4043 3 роки тому +7

    Отличная подача, я смотрю стримы разных кодеров, и они растягивают на лекции и на больше часа написания кода.
    Ты за 20 минут все рассказал на ура!
    Тем самым я закрепил основу основ, спасибо!

  • @profitergrant
    @profitergrant 4 роки тому +4

    Самые лучшие уроки по с# которые я смотрю на Ютюбе. Все разжовано, чётко, без воды.

  • @mikkimorfin3
    @mikkimorfin3 5 років тому +4

    ОТЛИЧНЫЙ КАНАЛ,ВСЕ ОЧЕНЬ ДОСТУПНО РАСКАЗЫВАЕШЬ ПРОСТЫМ ЯЗЫКОМ,ОЧЕНЬ РАД,ЧТО ТЫ ЕСТЬ!ПРОДОЛЖАЙ СНИМАТЬ ВИДЕО.

  • @user-ii2hp9tp1z
    @user-ii2hp9tp1z 4 роки тому +4

    мне надо за неделю-две написать autochess, курсач. Спасибо, мужик, спасаешь нереально!

  • @flepjack
    @flepjack 3 роки тому +5

    Это самое понятное объяснение этой темы которое я видел, автору огромное спасибо!

  • @andreyfedyaev8340
    @andreyfedyaev8340 Рік тому +4

    Просто какой-то нереально крутой урок. Спасибо огромное!

  • @user-mn7dx7xf7j
    @user-mn7dx7xf7j 4 роки тому +2

    Очень классно объяснил! Рад что посмотрел этот видос)

  • @-anonim-3008
    @-anonim-3008 Рік тому +1

    Спасибо большое! Очень классно, что пример показали на форма, там асинхронное программирование чаще всего применяется

  • @mirlan19
    @mirlan19 Рік тому +3

    Спасибо! Очень хорошо воспринимается когда показываешь графически!

  • @dasramm8513
    @dasramm8513 3 роки тому +4

    Хачатур, вот смотрю твои уроки и вижу - ты очень приятный человек, таких мало на Ютубе )))) и подача материала у тебя отличная.

  • @popkovvvv123
    @popkovvvv123 4 роки тому +2

    Очень хорошо объяснил, пример с фильмом отличный)

  • @leonbishop7404
    @leonbishop7404 4 роки тому +33

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

  • @vladislav3105
    @vladislav3105 2 роки тому +1

    Случайно наткнулся на это видео. У вас талант объяснять, большое спасибо!))

  • @yourmuse3234
    @yourmuse3234 3 роки тому +2

    спасибо вам большое!!! не заметил как прошел урок))

  • @Jajdushii
    @Jajdushii 2 роки тому +8

    Спасибо за очень важный труд. Надо бы сохранить себе весь цикл уроков себе на винт, а лучше и на болванки порезать)) Время такое.

  • @derwerwerwer8181
    @derwerwerwer8181 3 роки тому +3

    автор молодец хорошо объясняет, интересно слушать

  • @toshmatov
    @toshmatov 2 роки тому +2

    Супер уроки, благодарю от души!

  • @kakoytochel2286
    @kakoytochel2286 2 роки тому +2

    мое почтение , благодарю за урок

  • @zoch4287
    @zoch4287 5 місяців тому +1

    Очень круто объясняет!

  • @bakhtiyarov_dj
    @bakhtiyarov_dj 9 місяців тому +1

    Спасибо вам большое. Спасли от проблемы. Два часа сидел голову ломал.

  • @lomshakov
    @lomshakov 3 роки тому +2

    Спасибо за объяснение на пальцах для начинающих

  • @puser-yh9lv7kl1h
    @puser-yh9lv7kl1h 4 роки тому +32

    Быстро скачал весь плейлист, чтобы эти лучшие уроки не запретили!

    • @sabiradil
      @sabiradil 4 роки тому

      правильная мысль

    • @Uni-Coder
      @Uni-Coder 3 роки тому +2

      Ну и как, запретили?

    • @1pravoslavie1
      @1pravoslavie1 2 роки тому +2

      @@Uni-Coder Теперь ситуация в корне поменялась.

    • @user-be9rc4yz8r
      @user-be9rc4yz8r Рік тому

      @@1pravoslavie1 ниче не запретили

  • @develop1136
    @develop1136 5 років тому +4

    Всё классно объясняешь, продолжай в том же духе!
    Теперь я наконец догнал эту шляпу

  • @Roman-tt2rg
    @Roman-tt2rg 5 років тому +3

    Реально лучшие уроки программирования

  • @ramil9209
    @ramil9209 3 роки тому +3

    Спасибо за ваш труд)

  • @matrixon
    @matrixon 4 роки тому +2

    Шикарно объяснил, спасибо!

  • @MRalex4313
    @MRalex4313 3 роки тому +2

    Супер! Все очень просто и понятно

  • @ruslan_yefimov
    @ruslan_yefimov 2 роки тому +4

    11:50 Мы не видим, как обновляется лейбл не потому, что он быстро обновляется, а потом, что цикл выполняется между кадрами отрисовки) Мелкая неточность, но глаз мозолит.

  • @hello_world_zz
    @hello_world_zz 3 роки тому +2

    Классно объясняешь!

  • @sheonaner
    @sheonaner 5 місяців тому +2

    Блин, вы идеально объясняете, даже до меня тупоголового вся информация доходит

  • @user-ow1he8qm2h
    @user-ow1he8qm2h Рік тому +1

    Крутое объяснение! Респект!

  • @alvoltta
    @alvoltta 4 роки тому +4

    Сейчас она закроется. 3. всё. ))
    Спасибо за урок, мне нужно было увидеть эти уроки раньше, чем я прочел 400+ страниц Герберта Шилдта и чуть не спалил себе жопу пытаясь понять, что он там блин пишет.

    • @XpucT
      @XpucT  4 роки тому

      У Меня были такие же чувства при его прочтении =)

    • @alvoltta
      @alvoltta 4 роки тому +1

      @@XpucT на столько много терминов и примеры в консоли сразу с классами, наследованием уже страницы с 40й, учитывая что эта тема начинает обсуждаться на 250+, код ничего не умеет, он просто есть. кошмар. Но после 16 уроков прочтенная информация начинает собираться во что то систематизированное.

  • @HDunno
    @HDunno Рік тому +1

    Спасибо большое за объяснение!

  • @alexandrpyatov6896
    @alexandrpyatov6896 4 роки тому +1

    Спасибо, хорошая подача.

  • @vladisslavss
    @vladisslavss 2 роки тому +1

    Лукас)
    Спасибо за урок)

  • @BlendLogDev
    @BlendLogDev 4 роки тому +2

    Спасибо большое за урок. Сделал прикольную штуку, по нажатии одной кнопки откуда-то выезжает вторая, первая прячется и наоборот.
    кому интересно, ниже код
    на форме две кнопки button1, location(40;90), и button2, location(120; 40). Размер формы 252 на 252, на переднем плане label1, закрывающий нижнюю часть формы и кнопку. FormBorderStyle(FixedSingle)
    и код
    using System;
    using System.Drawing;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    namespace Program2
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
    MoveBtn1();
    }
    async void MoveBtn1()
    {
    while (button2.Location.Y != 90 && button1.Location.Y != 140)
    {
    button1.Enabled = false;
    button2.Enabled = false;
    button1.Location = new Point(button1.Location.X, button1.Location.Y + 1);
    button2.Location = new Point(button2.Location.X, button2.Location.Y - 1);
    await Task.Delay(1);
    }
    button1.Enabled = true;
    button2.Enabled = true;
    return;
    }
    private void button2_Click(object sender, EventArgs e)
    {
    MoveBtn2();
    }
    async void MoveBtn2()
    {
    while (button2.Location.Y != 140 && button1.Location.Y != 90)
    {
    button1.Enabled = false;
    button2.Enabled = false;
    button1.Location = new Point(button1.Location.X, button1.Location.Y - 1);
    button2.Location = new Point(button2.Location.X, button2.Location.Y + 1);
    await Task.Delay(1);
    }
    button1.Enabled = true;
    button2.Enabled = true;
    return;
    }
    }
    }

  • @lilyaosim3634
    @lilyaosim3634 4 роки тому

    Приветствую Христ! Очень полезные уроки, почти все видео про C# досмотрю и везде поставлю лайки. Дай Бог постараюсь сделать донат позже. Такие уроки заслуживают от нас поддержки, очень трудно найти ёмкую проффесиональную информацию в кратком видео, да и в начале не было привычно, слушал на скорости x0.75)) продолжайте в том же духе! Дай Бог вам крепчайшего здоровья, всех благ вам и вашей семье!

  • @user-zk3ho3to2d
    @user-zk3ho3to2d 4 роки тому +1

    спасибо) очень интересно)

  • @alexseley8633
    @alexseley8633 10 місяців тому

    Спасибо огромное, мужик!

  • @maxdark9817
    @maxdark9817 5 років тому +3

    отличный канал! Спасибо!
    Спасибо, отличный урок!
    Могли бы вы рассказать про много файловые проекты. Я не C# программист. но приходится периодически писать небольшие программки на C#.

  • @user-sm6du2wh7r
    @user-sm6du2wh7r 2 роки тому +2

    Вот это обьяснение.... 20 минут пролетели за минуту. Спасибо=)

  • @vsaliyy
    @vsaliyy 4 роки тому +2

    Боже, спасибо мужик !.

  • @user-yx2wx7we5n
    @user-yx2wx7we5n 5 років тому

    Добрый вечер. Подскажите маску слова(точнее набор символов aA 0-9) длина 20 символов между пробелами пробовал так \s[20]\s не сработало, за ранние спасибо

  • @U-ru-Ru
    @U-ru-Ru 6 місяців тому +2

    Чувак ты клёвый) 😂

  • @voxel1547
    @voxel1547 3 роки тому +1

    2 дня занимался фистингом с программой чтоб что-то пофиксить не помню уже что. А оказалось что все мои беды могли быть исправлены async'ом и await'ом.

  • @3dportableinc64
    @3dportableinc64 Рік тому

    спасибо пригодилось

  • @omoloni
    @omoloni 4 роки тому +3

    14:31 нужно ещё привязать к времени, потому что у меня она за секунду успевает на 2700 переместиться иначе у всех скорость разная будет

  • @stemykay4773
    @stemykay4773 3 роки тому +1

    Очень и очень хорошо)

  • @kerildash
    @kerildash 2 роки тому +1

    Офигеть, ты крут

  • @hello_world_zz
    @hello_world_zz 4 роки тому +2

    Классный способ подачи информации 👍👍👍👍 (я не с улицы, у меня 10 лет опыта, бакалавр )

  • @NoName-tk4ym
    @NoName-tk4ym 4 місяці тому

    await Task.Delay(1000); а его при повторном вызове метода можно как то обновить время или остановить предыдущий? что бы он не выполнялся 2 раза

  • @r.i8753
    @r.i8753 3 роки тому +4

    Видео просто супер!!! Спасибо большое.
    Привет всем! А если необходимо сделать несколько потоков (например: разбить на 4 потока, т.к. в процессоре 4 ядра, сложное вычисление:))? Потом полученную информацию с этих 4 потоков вывести как результат (сумму)?

  • @FANTOZZ-gf4vc
    @FANTOZZ-gf4vc 5 років тому

    Привет, слушай, я когда Close() вызываю пишет
    System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан."
    в чем ошибка?

    • @XpucT
      @XpucT  5 років тому

      Привет 🖐
      Хороший вопрос. Подробнее о том, как с этим бороться: ua-cam.com/video/vHqHrf914TA/v-deo.html

  • @user-tn3bw1wg8w
    @user-tn3bw1wg8w 5 років тому +5

    Спасибо) при создании бургер меню на форме, сильно выручает) только что заюзал) 👍

  • @nifertum9514
    @nifertum9514 4 роки тому +2

    Лучший

  • @user-ku8hx3om4u
    @user-ku8hx3om4u 4 роки тому +5

    Спасибо за видео, отлично объяснил)))))

  • @Slonick
    @Slonick 5 років тому +4

    Сам X в location не можно менять, так как это структура. Есть каким-то образом всё же поменять X, то в кнопке не изменится значение. Это специфика хранения в памяти объектов.

    • @user-be9rc4yz8r
      @user-be9rc4yz8r Рік тому +1

      да, но вместо икса можно свойство left использовать

  • @eugene9699
    @eugene9699 Рік тому

    А если возвращать не void а Task, или, например, вместо string Task. Есть какое-то принципиальное отличие?

  • @happyfog15
    @happyfog15 2 роки тому +2

    Когда делал кастомный скролл-бар не нашел инфы о простой задержке, поэтому использовал Timer. Надо попробовать await Task.Delay(); Может быть это будет проще.

  • @user-we6si4mi3x
    @user-we6si4mi3x 2 роки тому +1

    комментарий в поддержку )

  • @user-vl8su6br1g
    @user-vl8su6br1g Рік тому +1

    Храни тебя Боженька=)

  • @ilya9261
    @ilya9261 2 роки тому +3

    Вот еще очень понятный пример, как это работает:
    class Program
    {
    static void Main(string[] args)
    {
    var a = new Program();
    a.M();
    Console.WriteLine("qq");
    Console.ReadKey();
    }
    async void M()
    {
    await Task.Run(() =>
    {
    while (true)
    {
    Console.WriteLine("sleep");
    Thread.Sleep(2000);
    }
    });
    }
    }
    Пока не нажмем кнопку, асинхронный метод будет выполняться. После нажатия - работа программы прекращается, что означает готовность программы не зависнуть на вызове метода M

  • @dmitryyakovlev3003
    @dmitryyakovlev3003 3 роки тому +1

    ОГРОМНОЕ спасибо

    • @dmitryyakovlev3003
      @dmitryyakovlev3003 3 роки тому +1

      делал генерацию уровней в игре, очень пригодились эти функции

  • @brayanhustler93
    @brayanhustler93 4 роки тому +1

    можно ту же самую телегу реализовать создав отдельный поток. И выполнять асинхронный код в нем. Так даже уменьшается нагрузка на проц

  • @user-gm6xg4hd4i
    @user-gm6xg4hd4i 4 роки тому +3

    Первая действительно сложная тема для меня. Раньше немного игрался с Delphi и PHP, там такого нет (или не добрался)

  • @AllRockAndMetal
    @AllRockAndMetal 5 років тому +48

    синхронно - это когда вместе одно и то же делают, асинхронно - когда одновременно делаются разные вещи)

    • @dvdrelin
      @dvdrelin 3 роки тому

      не совсем так. если я в очереди пропущу народ на кассе, пока мне друг не скинет сотку на сиги, это не значит что кассир обслужит меня и очередь параллельно

    • @AllRockAndMetal
      @AllRockAndMetal 3 роки тому

      @@dvdrelin не значит, и что? я не понял, к чему ты вообще. И да, аналогия не является аргументом. Объясни прямо то, что ты хочешь.

    • @dvdrelin
      @dvdrelin 3 роки тому +5

      @@AllRockAndMetal это я к тому, что вы путаете два понятия.
      синхронно, это когда одна задача следует четко за другой, и пока одна не завершится - следующая не стартанет.
      асинхронно - это когда одна задача не успев завершится может отдать ресурс для других его потребителей, с целью неблокирования этого ресурса собой.
      а параллельно, это когда два независимых процесса/задачи выполняются независимо друг от друга стартовав одновременно.

    • @dvdrelin
      @dvdrelin 3 роки тому

      @@AllRockAndMetal аналогия может быть аргументом, но не обязана. это зависит от способности ума рассуждать)

    • @AllRockAndMetal
      @AllRockAndMetal 3 роки тому

      @@dvdrelin аналогия не может быть аргументом, она может просто совпасть, но какой смысл проверять эти совпадения. Аналогия помогает объяснить что-то по другому. То, как ты написал выше, сразу понятно стало, спасибо) я рассуждал из значений самих слов, в программировании да, меняется это все)

  • @UFO26
    @UFO26 Рік тому

    Делает ли Delay задержку в 1 мс, я где-то читал что стандартные задержки имеют погрешность в 17 мс. И чтобы сделать именно 1 мс, надо использовать другую библиотеку.

    • @XpucT
      @XpucT  Рік тому

      Неправда. Какую библиотеку ни добавляй, что ни меняй, любой случай может вызвать погрешность из-за специфики самого процессора.

  • @user-oh3ew8qm3s
    @user-oh3ew8qm3s 4 роки тому +2

    Все понятно и интересно, спасибо за урок!

  • @MileshkoVladimir
    @MileshkoVladimir 4 роки тому +2

    Привет всем! Подскажите, кто в курсе. Есть ли принципиальная разница в вариантах если: прописать асинхронный метод, например async byte ReadBuffer(){...}, и вызвать его через Task.Run(() => ReadBuffer();), как рассказывается в этом уроке, или такой вариант: реализовать метод как задачу async Task ReadBuff(){...} и вызвать таском вот так Task.Run(ReadBuff); Есть ли какая-то разница, кроме сокращения кода при вызове метода?

    • @XpucT
      @XpucT  4 роки тому

      Привет 🖐
      В данном случае разницы нет вообще. И так и так можно.

    • @MileshkoVladimir
      @MileshkoVladimir 4 роки тому +1

      @@XpucT отлично! Большое спасибо за уроки! Классно рассказываете 😉👌

  • @chernobylfx2379
    @chernobylfx2379 4 роки тому

    Подскажи что за шрифт и какой размер?

  • @googlgan
    @googlgan 4 роки тому

    Очень доступно! Спасибо! Но столкнулся с проблемой. Допустим в одной кнопке у меня выполняется асинхронная операция
    await Task.Run(() =>
    {
    // Тут код первой кнопки
    });
    А теперь я хочу из второй кнопки прекратить выполнение этого кода (из первой кнопки). Ка как это сделать?

    • @XpucT
      @XpucT  4 роки тому +1

      bool need = true;
      async void Button1_Click(object sender, EventArgs e)
      {
      while (need)
      await Task.Run(() =>
      {
      // Тут код первой кнопки
      });
      }
      void button2_Click(object sender, EventArgs e)
      {
      need = false;
      }

  • @korwin86
    @korwin86 4 роки тому +1

    Два года назад я с этой хренью так и не разобрался. Прога в цикле рисовала листы с заполненными табличками в файле excel из таблицы с данными. Пока она это делала, она висела(листов было штук по 500-900 и минуты 1.5 это дело происходило). :) В итоге сделал костыль в виде лэйбл который писал циферками номер создаваемого листа и пользователю сказал чтоб он не дергался что программа зависла, мол пишет тебе циферки, значит листы создаются. Оказывается что так всё просто. надо было цикл в метод вытащить и прогресбар повесить с тем же счетчиком, равным количеству листов. Спасибо за твой уроки! Реально, заумное гавно человеческим языком сразу проще воспринимать.

    • @XpucT
      @XpucT  4 роки тому +3

      Я думаю, что дело не в заумном говне, а в том, что люди думают, что они кажутся умнее, когда пытаются заумно говорить. Хотя цель у учителя должна быть объяснять всё, а не просто учить. И когда всё понятно, тогда и учится проще. Не нужно запоминать - всё и так понятно =)

  • @potuStoronka
    @potuStoronka 4 роки тому +2

    Спасибо, урок веселый и доступным языком

  • @sarbasov
    @sarbasov 3 роки тому +3

    4:50 а если убрать await и async, разве не будет асинхронности? Task.Run() же вроде так и так сработает асинхронно.

    • @XpucT
      @XpucT  3 роки тому +3

      await требует того, чтобы задача ожидалась.
      Привожу пример:
      await Task.Run(() =>
      {
      while (File.Exists(@"C:\Users\Admin\Desktop\1.txt"))
      {
      }
      });
      MessageBox.Show("Test");
      MessageBox не будет показан пока файл существует.
      А если сделаешь так:
      Task.Run(() =>
      {
      while (File.Exists(@"C:\Users\Admin\Desktop\1.txt"))
      {
      }
      });
      MessageBox.Show("Test");
      То MessageBox будет показан сразу после вызова Task.
      И что там в этом Task уже не важно, ибо программа побежала дальше по строкам.
      await требует ждать и выполнять всё последовательно - по завершении.

  • @denissaygin3371
    @denissaygin3371 4 роки тому +4

    То чувство, когда сначала узнал, что такое генераторы, потом корутины, и только сейчас наконец до конца понял принцип работы async-await

    • @XpucT
      @XpucT  4 роки тому

      Точно также Я не понимал, когда читал книги и изучал курсы - зачем Мне строить ракету на луну, чтобы просто удалить файл... Зачееем?? Поэтому в своём курсе Я иду в своём порядке. Сначала задача, потом идея, потом решение. Без пустых, давайте построим шатл...

  • @great8814
    @great8814 3 роки тому

    А видел типо писать просто перед строкой await. Это типо тоже самое что и Task.Run, только для одной строки?

  • @RUSich10
    @RUSich10 4 місяці тому

    Только изучаю шарп и в голове у себя уложил концепцию async await так: В JS ассинхронность широко распространена и применяется. Но там для реализации асинхронности требуется писать код своеобразным стилем. Например. посылаем аякс запрос на сервер и хотим обработать результат (пример из jQuery):
    $.post( "ajax/test.html", function( data ) {
    $( ".result" ).html( data );
    });
    Получается, что мы разбили функционал на 2 функции. Первая что то делает до отправки запроса и отправляет сам запрос. Вторая - это анонимна функция, которую мы передам в параметр метода post, она обрабатывает результат запроса...
    Для меня это понятная и привычная концепция, но читать её не очень удобно. Один целостный функционал разбивается на 2 функции.
    async await - это такой синтаксический сахар, который позволяет оставить запись этого функционала в рамках одного метода.
    Я так понял, что когда мы пишем async - это указание компилятору, что внутри метод будет разделён на 2 или более "подметодов". И разделителем выступает вызов методов с ключевым словом await. Всё что до него и сам await метод выполняются в первом "подметоде", а всё что после await как бы попадает в отдельную функцию ("подметод"), которая вызовется спустя время...

  • @g①ldman
    @g①ldman Рік тому

    А если делать это таймером ? А таймер уже сам по себе асинхронно работает ? Например делать такую же анимацию?

  • @diwoolly6293
    @diwoolly6293 5 років тому

    Здравствуйте, подскажите пожалуйста, выдаётся исключение "Исключение типа "System.InvalidOperationException" возникло в System.Windows.Forms.dll, но не было обработано в коде пользователя
    Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'textBox1' не из того потока, в котором он был создан."
    по следующему коду
    private async void button1_Click(object sender, EventArgs e)
    {
    try
    {

    await Task.Run(() =>
    {
    string str1 = textBox1.Text;
    char[] char_arr1 = str1.ToCharArray();
    for (int i = 0; i < char_arr1.Length; i++)
    {
    char fg = GetHexCodeLitera(char_arr1[i]);
    Thread.Sleep(1000);
    SendKey(fg);
    textBox1.Text += fg;
    }
    });
    }
    catch (Exception err)
    {
    MessageBox.Show(null, "Ошибка!!!! Номер строки в основной таблице = Сама ошибка " + err.ToString(), "Ошибка");
    GC.WaitForPendingFinalizers();
    GC.Collect();
    }
    }

    • @XpucT
      @XpucT  5 років тому

      Добрый день.
      Так и должно быть, потому что нельзя менять свойства контролов из других потоков. Можно, если заставить сделать это через основной поток.
      Подробнее об этом Вы узнаете в этом видео ➜ ua-cam.com/video/vHqHrf914TA/v-deo.html
      Но поверьте на слово, если Вы продвинулись в уроках так, что приходится узнавать что-то раньше, значит Вы будете делать ошибки.
      Одна уже есть - Вы делаете Thread.Sleep(1000) вместо await Task.Delay(1000) и так будет дальше, если будете баловаться с потоками, не понимая того, как они работают. Рекомендую оставить ту часть кода, которую мы не проходили в этом курсе и двигаться дальше к 16 видео и т.д.
      Ссылку Я Вам, конечно, на ответ дал, но Моя личная рекомендация, ещё раз, не пользоваться знаниями из будущего, а прийти к ним с другими знаниями, иначе уверяю, будет каша и тонна ошибок, если пропускать. Я и так сжал курс и убрал лишнее.

    • @diwoolly6293
      @diwoolly6293 5 років тому

      @@XpucT Большое спасибо. Уже смотрю видео по данной Вами ссылке. Да получается я ещё и останавливаю основной поток внутри задания. Торопливость к сожалению мой главный недостаток...

  • @Alex_Lutor
    @Alex_Lutor Рік тому +2

    Спасибо ! Очень во время ! Весь день убил , прогрессбар даже с бэкграундворкером организовал , а у вас гораздо практичнее!

  • @vmalyk1650
    @vmalyk1650 5 років тому +5

    XpucT
    а будут другие технологии рассмотрены ( ASP.NET и другие) ?

    • @XpucT
      @XpucT  5 років тому +2

      Может быть.

    • @MileshkoVladimir
      @MileshkoVladimir 4 роки тому +2

      Да вот по ASP. NET бы такие понятные уроки запилить - было бы вообще пушка! А то там реально дофига в чем разбираться нужно. Тоже хочу его освоить...

    • @user-hz7cr2wo5u
      @user-hz7cr2wo5u 4 роки тому +1

      MVC

  • @user-nh1lp8xt4j
    @user-nh1lp8xt4j 2 роки тому +1

    То есть получается что await это ожидание внутри асинхронного метода? И нам не важно где мы его поставим но оно почемуто должно там обязательно быть?

    • @XpucT
      @XpucT  2 роки тому +1

      Примерно так =)

  • @azerqgaming
    @azerqgaming Рік тому +1

    C# такой: "Я подсмотрю у тебя, JS?"
    JS: "Да, только не списывай 1 в 1."
    C#: "Да, да 😆"

    • @XpucT
      @XpucT  Рік тому

      Для разнообразия точку с запятой в конце строк буду ставить

    • @azerqgaming
      @azerqgaming Рік тому +1

      @@XpucT кстати TypeScript иногда очень Шарп напоминает, чувствуется рука Майкрософт :)

    • @XpucT
      @XpucT  Рік тому

      @@azerqgaming +++

  • @anderwafe
    @anderwafe 4 роки тому +1

    а после завершения асинхронной части метода он все равно продолжает работать асинхронно, либо остальные потоки останавливаются до завершения данного метода?

    • @XpucT
      @XpucT  4 роки тому

      Нет, асинхронность заканчивается на блоке кода и ограничена следующими символами: });
      То есть таким образом инструкции внутри завершены, и дальше всё пашет синхронно.
      Но если сам по себе метод асинхронный, то место, откуда был вызван метод, не будет ждать завершения метода.
      Пересмотрите ещё раз.

  • @user-lc9wd8xu2r
    @user-lc9wd8xu2r 2 роки тому +2

    Слово асинхронно используется потому, что задачи стартуют и заканчиваются не одновременно.

  • @garretgrom5823
    @garretgrom5823 4 роки тому

    будут ли уроки по wpf ?

  • @grabson8232
    @grabson8232 5 років тому

    Здравствуй, лучший в мире препод, жалею что у меня в школе нет такого информатика. Хотел спросить как генерировать случайные числа в выбранном диапазоне. Хочу написать что-то типа аим тренера, хочу перемещать кнопку по полю на рандомные точки но не знаю как сгенерировать координаты, заранее спасибо.

  • @Eltar007
    @Eltar007 4 роки тому +2

    Очень классный материал! Только можно попросить посмотреть такую задачу? Как из асинхронного метода изменять свойства элементов на форме? Нужно изменить текст в label1... или любом другом элементе формы. Написал код:
    private void button1_Click(object sender, EventArgs e)
    {
    if (button1.Text == "Start")
    {
    button1.Text = "Stop";
    Method();
    }
    else
    {
    button1.Text = "Start";
    }
    }
    async void Method()
    {
    await Task.Run(() =>
    {
    while (button1.Text == "Stop")
    {
    Thread.Sleep(1000);
    label1.Text += "
    " + DateTime.Now.ToString();
    }
    });
    }
    Ругается на строку label1.Text += "
    " + DateTime.Now.ToString();
    prntscr.com/rvyreg

    • @XpucT
      @XpucT  4 роки тому

      Потому что Вы делаете в Debug, а нужно собирать в Release.
      Чтобы понимать, почему поток "не может" трогать контролы, Вам нужно посмотреть видео про потоки.
      ua-cam.com/video/vHqHrf914TA/v-deo.html
      Тем не менее, решение для Вашей задачи:
      async void Method()
      {
      await Task.Run(async () =>
      {
      while (button1.Text == "Stop")
      {
      await Task.Delay(1000);
      Invoke((Action)(() =>
      {
      label1.Text += "
      " + DateTime.Now.ToString();
      }));
      }
      });
      }

  • @user-vx1io9vu5s
    @user-vx1io9vu5s 4 роки тому +1

    Я бы хотел такой вопрос задать, все классно и замечательно , но как в асинхронном методе заполнять label итд текст боксы, у меня постоянно в этой конструкции выдает ошибку await Task.Run(()=> тут пример код который записывает в лейбл });

    • @XpucT
      @XpucT  4 роки тому

      Потому что управляете кодом в режиме Debug, а не Release.
      Ответ тут: ua-cam.com/video/vHqHrf914TA/v-deo.html
      однако, советую не нарушать последовательность просмотра видео.
      Временное решение - запишите это ↓ где-нибудь в загрузке формы:
      CheckForIllegalCrossThreadCalls = false;
      Подчёркиваю - это временное решение. Не привыкайте.

    • @user-vx1io9vu5s
      @user-vx1io9vu5s 4 роки тому +1

      @@XpucT Спасибо большое!

  • @hop173
    @hop173 2 роки тому +1

    Почему я так поздно нашёл это видео, когда уже не актуально)

    • @XpucT
      @XpucT  2 роки тому

    • @hop173
      @hop173 2 роки тому

      @@XpucT не увидел ролика, если есть ткните пальцем, если нет то очень не помешал бы разговор на тему EF и как это дело работает изнутри)

  • @tyuop
    @tyuop 5 років тому +2

    Интересно, а без catch можно создать свое окно ошибки, чтобы оно не сильно бросалось в глаза, либо просто записывало ошибку в логах или в textBox?
    (При этом стандартная форма ошибки никогда не появлялась)
    Как сделать не спрашиваю, просто интересно в C# такое можно ли сделать…

    • @XpucT
      @XpucT  5 років тому

      Совершенно точно.
      Можно делать с переменной ex, которая в видео что угодно.
      Хочешь в MessageBox, хочешь на почту автоматом шлёт, хочешь картинку делает.
      Вообще нет границ.

    • @tyuop
      @tyuop 5 років тому

      XpucT но тогда придется после каждого действия (в котором может возникнуть ошибка) делать catch, а можно ли сделать какую-то функцию, которая вызовет это, либо всё полностью в try вставить…
      Или такого способа нету? (Каждое действие в try...catch)
      Чтобы функция вызывалась после ошибки моя. И это функцию не писать каждый раз в catch {…errbox(e)
      Ну вот допустим есть программа с действиями, которые могут вызвать ошибки:
      f1;
      f2;
      f3;
      Мне нужно каждый в try добавлять?

    • @XpucT
      @XpucT  5 років тому +1

      @@tyuop ничего автоматического в программировании нет. Нужно самому отлавливать ошибки с помощью try catch.
      Нельзя сделать так, чтобы если где-то что-то произойдёт, сам по себе произошёл предварительно настроенный catch.
      Можно просто в самом catch указать на универсальную инструкцию.

  • @user-fx9ik1do3v
    @user-fx9ik1do3v 4 роки тому +1

    Привет. Есть вопрос: я хочу на панель добавить range контролов, но, когда происходит добавление, всё виснет, и не важно через begininvoke() панели это делаешь, или с помощью асинхронных методов, или всё вместе, один хрен - виснет.

    • @XpucT
      @XpucT  4 роки тому

      Привет 🖐
      Напиши код, который Я смогу воспроизвести у себя и убедиться в этом.
      Я скину обратно рабочий.

    • @user-fx9ik1do3v
      @user-fx9ik1do3v 4 роки тому

      ​@@XpucT drive.google.com/file/d/1RAkEhfUrPVb38Py0-M91K2kNSkiKTXdJ/view?usp=sharing Создал, для примера, проект. Большое спасибо за твои уроки!

    • @XpucT
      @XpucT  4 роки тому

      @@user-fx9ik1do3v тут, к сожалению, всё зависит от процессора. Кодом это не поправить.
      Подробный коммент тут: ru.stackoverflow.com/a/514533

    • @user-fx9ik1do3v
      @user-fx9ik1do3v 4 роки тому +1

      @@XpucT печально, напрягает этот фриз. В любом случае, спасибо за уделённое время.

    • @user-fx9ik1do3v
      @user-fx9ik1do3v 4 роки тому +1

      @@XpucT Я вот думаю, а если сделать асинхронную насильную задержку добавления контрола?( добавлять не через AddRange, а просто циклом через Add с вызовом await Task.Delay, чтобы операция происходила не сразу, а постепенно, не перегружая поток .. )Да, это будет в разы медленнее, зато фриз пропадёт, наверное.(не пробовал) Как приду, стоит попробовать. Или это глупо?