Донаты и на кофе ➜ t.me/win10twea... Эксклюзив для спонсоров ➜ / xpuct Если недоступна спонсорка ➜ vk.cc/ctNjM7 Выполнить асинхронно: pastebin.com/r... Основной канал: / jailbreakvideo #async #await #Task #Thread #СиШарп
Пікірлер: 372
@ПростоЁж-щ3ъ5 жыл бұрын
Боже, где ты был, когда я все это изучал. Так хорошо разжевал. Мне днями на пролет приходилось в документации копаться, задачу сделал, но так и не понял нормально, как оно работает. А тут вот как оно просто. Блин круто делаешь.
@дядявася-м3д4 жыл бұрын
Как успехи в обучении??)
@Тимур-ц5к7м4 жыл бұрын
Как идет развитие?, уже 10 месяцев прошло
@ПростоЁж-щ3ъ4 жыл бұрын
Если честно, для 10 месяцев в шарпе продвинулся не так сильно, как бы мог. Да не испытываю проблем в написании проектов на wpf mvvm или чего-то простого на asp mvc, но думается мне, за такой срок уже работу найти можно было бы, а я так и на собеседование не сходил. Так что развитием своим шарповским не удовлетворен, на несколько месяцев вообще перешел на питон и Vue js, даже сейчас пишу на питоне чаще. Главная ошибка, которую я совершил, это неадекватно начал стараться по учебе, что привело в конце семестра к полному нежеланию что-либо делать, в этом семестре пока все ок, успел написать пару проектов для резюме, лениво так вот продвигаюсь. Спасибо, что спросили, Господа. (Блин, вы напомнили мне это, теперь мне стыдно за зря потраченное время)
@Тимур-ц5к7м4 жыл бұрын
@@ПростоЁж-щ3ъ Что значит в твоем понимании *неадекватно старался*?
@ПростоЁж-щ3ъ4 жыл бұрын
@@Тимур-ц5к7м, приходил после учебы домой и учился еще там до поздна, меня что-то торкнуло и я решил сдать все лабы очень быстро. А неадекватно это для меня, т.к. обычно я сдаю все ближе к концу семестра, спокойно, не торопясь (ну как все короче). Сначала было классно, за пару месяцев избавиться от части предметов, мне нравилось это ощущение, но я мало того, что не смог поддерживать такую скорость дальше, так я еще и сдулся и вообще не хотел ничего. Теперь стараюсь дозировать нагрузки и мешать его с отдыхом.
@t3m4ch545 жыл бұрын
Эти 20 минут были лучшие за последнее время.
@ВадимНачаров-ю6ы7 ай бұрын
подписываюсь под каждым словом!
@Jalaveyan7 ай бұрын
Лучшее обьяснение работы async/await, что я видел.
@АртемКалініченко-ж3н4 ай бұрын
Это был лучший урок по async, await который я видел. Спасибо!
@profitergrant4 жыл бұрын
Самые лучшие уроки по с# которые я смотрю на Ютюбе. Все разжовано, чётко, без воды.
@svyatoslav40433 жыл бұрын
Отличная подача, я смотрю стримы разных кодеров, и они растягивают на лекции и на больше часа написания кода. Ты за 20 минут все рассказал на ура! Тем самым я закрепил основу основ, спасибо!
@Max1GameChannel2 жыл бұрын
13:20 button1.Left++; Если нужно по Y то button1.Top++; MSDN: Используйте Location свойство, чтобы одновременно задать координаты X и Y элемента управления. Чтобы задать расположение по отдельности, используйте Left подсвойство (X) или Top (Y) элемента управления. Не пытайтесь неявно задать координаты X и Y Point структуры, представляющей расположение кнопки, так как эта структура содержит копию координат кнопки.
Хачатур, вот смотрю твои уроки и вижу - ты очень приятный человек, таких мало на Ютубе )))) и подача материала у тебя отличная.
@АлексейЛавренович-х7е4 жыл бұрын
мне надо за неделю-две написать autochess, курсач. Спасибо, мужик, спасаешь нереально!
@mikkimorfin35 жыл бұрын
ОТЛИЧНЫЙ КАНАЛ,ВСЕ ОЧЕНЬ ДОСТУПНО РАСКАЗЫВАЕШЬ ПРОСТЫМ ЯЗЫКОМ,ОЧЕНЬ РАД,ЧТО ТЫ ЕСТЬ!ПРОДОЛЖАЙ СНИМАТЬ ВИДЕО.
@leonbishop74044 жыл бұрын
Автор канала - спасибо вам за уроки, и за то, что разбавляете обучение юмором, это позволяет с меньшим количеством усилий гораздо лучше удерживать внимание, и даже немного вызывает зависимость от вашего контента, уже не первое видео смотрю :)
@mirlan192 жыл бұрын
Спасибо! Очень хорошо воспринимается когда показываешь графически!
@flepjack3 жыл бұрын
Это самое понятное объяснение этой темы которое я видел, автору огромное спасибо!
@leonbishop74044 жыл бұрын
"Сразу говорю: где-нибудь, что-нибудь, я не знаю" в рамочку поставлю у себя в комнате.
@leonbishop74044 жыл бұрын
повешу даже. на стену.
@Porosti3 ай бұрын
Ты лучший! В отличии от других тебя реально интересно смотреть!
@andreyfedyaev83402 жыл бұрын
Просто какой-то нереально крутой урок. Спасибо огромное!
@siriusawp37125 жыл бұрын
17:10 ну while (true) же
@-anonim-3008 Жыл бұрын
Спасибо большое! Очень классно, что пример показали на форма, там асинхронное программирование чаще всего применяется
@АртурГагиев-ж7я4 жыл бұрын
Очень классно объяснил! Рад что посмотрел этот видос)
@Jajdushii2 жыл бұрын
Спасибо за очень важный труд. Надо бы сохранить себе весь цикл уроков себе на винт, а лучше и на болванки порезать)) Время такое.
@puser-yh9lv7kl1h5 жыл бұрын
Быстро скачал весь плейлист, чтобы эти лучшие уроки не запретили!
@sabiradil4 жыл бұрын
правильная мысль
@Uni-Coder3 жыл бұрын
Ну и как, запретили?
@1pravoslavie12 жыл бұрын
@@Uni-Coder Теперь ситуация в корне поменялась.
@ДанилТемежников2 жыл бұрын
@@1pravoslavie1 ниче не запретили
@vladislav31052 жыл бұрын
Случайно наткнулся на это видео. У вас талант объяснять, большое спасибо!))
@bakhtiyarov_dj11 ай бұрын
Спасибо вам большое. Спасли от проблемы. Два часа сидел голову ломал.
@derwerwerwer81813 жыл бұрын
автор молодец хорошо объясняет, интересно слушать
@popkovvvv1235 жыл бұрын
Очень хорошо объяснил, пример с фильмом отличный)
@lomshakov3 жыл бұрын
Спасибо за объяснение на пальцах для начинающих
@sheonaner7 ай бұрын
Блин, вы идеально объясняете, даже до меня тупоголового вся информация доходит
@toshmatov2 жыл бұрын
Супер уроки, благодарю от души!
@kakoytochel22863 жыл бұрын
мое почтение , благодарю за урок
@Roman-tt2rg5 жыл бұрын
Реально лучшие уроки программирования
@BlendLogDev4 жыл бұрын
Спасибо большое за урок. Сделал прикольную штуку, по нажатии одной кнопки откуда-то выезжает вторая, первая прячется и наоборот. кому интересно, ниже код на форме две кнопки 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; } } }
@ruslan_yefimov2 жыл бұрын
11:50 Мы не видим, как обновляется лейбл не потому, что он быстро обновляется, а потом, что цикл выполняется между кадрами отрисовки) Мелкая неточность, но глаз мозолит.
@yourmuse32343 жыл бұрын
спасибо вам большое!!! не заметил как прошел урок))
@develop11365 жыл бұрын
Всё классно объясняешь, продолжай в том же духе! Теперь я наконец догнал эту шляпу
@alvoltta4 жыл бұрын
Сейчас она закроется. 3. всё. )) Спасибо за урок, мне нужно было увидеть эти уроки раньше, чем я прочел 400+ страниц Герберта Шилдта и чуть не спалил себе жопу пытаясь понять, что он там блин пишет.
@XpucT4 жыл бұрын
У Меня были такие же чувства при его прочтении =)
@alvoltta4 жыл бұрын
@@XpucT на столько много терминов и примеры в консоли сразу с классами, наследованием уже страницы с 40й, учитывая что эта тема начинает обсуждаться на 250+, код ничего не умеет, он просто есть. кошмар. Но после 16 уроков прочтенная информация начинает собираться во что то систематизированное.
@MRalex43133 жыл бұрын
Супер! Все очень просто и понятно
@Павел-щ5р8ы2 жыл бұрын
Вот это обьяснение.... 20 минут пролетели за минуту. Спасибо=)
@lilyaosim36344 жыл бұрын
Приветствую Христ! Очень полезные уроки, почти все видео про C# досмотрю и везде поставлю лайки. Дай Бог постараюсь сделать донат позже. Такие уроки заслуживают от нас поддержки, очень трудно найти ёмкую проффесиональную информацию в кратком видео, да и в начале не было привычно, слушал на скорости x0.75)) продолжайте в том же духе! Дай Бог вам крепчайшего здоровья, всех благ вам и вашей семье!
@ramil92094 жыл бұрын
Спасибо за ваш труд)
@U-ru-Ru8 ай бұрын
Чувак ты клёвый) 😂
@jenik62102 ай бұрын
Спасибо большое
@hello_world_zz3 жыл бұрын
Классно объясняешь!
@matrixon4 жыл бұрын
Шикарно объяснил, спасибо!
@dunnoqwe Жыл бұрын
Спасибо большое за объяснение!
@zoch42877 ай бұрын
Очень круто объясняет!
@АндрейБабаш-ю9п Жыл бұрын
Крутое объяснение! Респект!
@vsaliyy4 жыл бұрын
Боже, спасибо мужик !.
@alexseley8633 Жыл бұрын
Спасибо огромное, мужик!
@ПавелЮров-з9ж Жыл бұрын
Храни тебя Боженька=)
@hello_world_zz4 жыл бұрын
Классный способ подачи информации 👍👍👍👍 (я не с улицы, у меня 10 лет опыта, бакалавр )
@voxel15473 жыл бұрын
2 дня занимался фистингом с программой чтоб что-то пофиксить не помню уже что. А оказалось что все мои беды могли быть исправлены async'ом и await'ом.
@PavelStr-x5w2 жыл бұрын
комментарий в поддержку )
@happyfog152 жыл бұрын
Когда делал кастомный скролл-бар не нашел инфы о простой задержке, поэтому использовал Timer. Надо попробовать await Task.Delay(); Может быть это будет проще.
@kerildash3 жыл бұрын
Офигеть, ты крут
@Eltar0074 жыл бұрын
Очень классный материал! Только можно попросить посмотреть такую задачу? Как из асинхронного метода изменять свойства элементов на форме? Нужно изменить текст в 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
@XpucT4 жыл бұрын
Потому что Вы делаете в Debug, а нужно собирать в Release. Чтобы понимать, почему поток "не может" трогать контролы, Вам нужно посмотреть видео про потоки. kzbin.info/www/bejne/rHnUeaWcbpZniqM Тем не менее, решение для Вашей задачи: async void Method() { await Task.Run(async () => { while (button1.Text == "Stop") { await Task.Delay(1000); Invoke((Action)(() => { label1.Text += " " + DateTime.Now.ToString(); })); } }); }
@vladisslavss2 жыл бұрын
Лукас) Спасибо за урок)
@Slonick5 жыл бұрын
Сам X в location не можно менять, так как это структура. Есть каким-то образом всё же поменять X, то в кнопке не изменится значение. Это специфика хранения в памяти объектов.
@ДанилТемежников2 жыл бұрын
да, но вместо икса можно свойство left использовать
@isagidaiki3 ай бұрын
есть идея) сделать несколько кнопок и устроить среди них гонку, как у животных) в Delay передавать Random от 1 до 100 например пхпххп
@r.i87533 жыл бұрын
Видео просто супер!!! Спасибо большое. Привет всем! А если необходимо сделать несколько потоков (например: разбить на 4 потока, т.к. в процессоре 4 ядра, сложное вычисление:))? Потом полученную информацию с этих 4 потоков вывести как результат (сумму)?
@maxdark98175 жыл бұрын
отличный канал! Спасибо! Спасибо, отличный урок! Могли бы вы рассказать про много файловые проекты. Я не C# программист. но приходится периодически писать небольшие программки на C#.
@korwin864 жыл бұрын
Два года назад я с этой хренью так и не разобрался. Прога в цикле рисовала листы с заполненными табличками в файле excel из таблицы с данными. Пока она это делала, она висела(листов было штук по 500-900 и минуты 1.5 это дело происходило). :) В итоге сделал костыль в виде лэйбл который писал циферками номер создаваемого листа и пользователю сказал чтоб он не дергался что программа зависла, мол пишет тебе циферки, значит листы создаются. Оказывается что так всё просто. надо было цикл в метод вытащить и прогресбар повесить с тем же счетчиком, равным количеству листов. Спасибо за твой уроки! Реально, заумное гавно человеческим языком сразу проще воспринимать.
@XpucT4 жыл бұрын
Я думаю, что дело не в заумном говне, а в том, что люди думают, что они кажутся умнее, когда пытаются заумно говорить. Хотя цель у учителя должна быть объяснять всё, а не просто учить. И когда всё понятно, тогда и учится проще. Не нужно запоминать - всё и так понятно =)
@AllRockAndMetal5 жыл бұрын
синхронно - это когда вместе одно и то же делают, асинхронно - когда одновременно делаются разные вещи)
@dvdrelin3 жыл бұрын
не совсем так. если я в очереди пропущу народ на кассе, пока мне друг не скинет сотку на сиги, это не значит что кассир обслужит меня и очередь параллельно
@AllRockAndMetal3 жыл бұрын
@@dvdrelin не значит, и что? я не понял, к чему ты вообще. И да, аналогия не является аргументом. Объясни прямо то, что ты хочешь.
@dvdrelin3 жыл бұрын
@@AllRockAndMetal это я к тому, что вы путаете два понятия. синхронно, это когда одна задача следует четко за другой, и пока одна не завершится - следующая не стартанет. асинхронно - это когда одна задача не успев завершится может отдать ресурс для других его потребителей, с целью неблокирования этого ресурса собой. а параллельно, это когда два независимых процесса/задачи выполняются независимо друг от друга стартовав одновременно.
@dvdrelin3 жыл бұрын
@@AllRockAndMetal аналогия может быть аргументом, но не обязана. это зависит от способности ума рассуждать)
@AllRockAndMetal3 жыл бұрын
@@dvdrelin аналогия не может быть аргументом, она может просто совпасть, но какой смысл проверять эти совпадения. Аналогия помогает объяснить что-то по другому. То, как ты написал выше, сразу понятно стало, спасибо) я рассуждал из значений самих слов, в программировании да, меняется это все)
@RUSich107 ай бұрын
Только изучаю шарп и в голове у себя уложил концепцию async await так: В JS ассинхронность широко распространена и применяется. Но там для реализации асинхронности требуется писать код своеобразным стилем. Например. посылаем аякс запрос на сервер и хотим обработать результат (пример из jQuery): $.post( "ajax/test.html", function( data ) { $( ".result" ).html( data ); }); Получается, что мы разбили функционал на 2 функции. Первая что то делает до отправки запроса и отправляет сам запрос. Вторая - это анонимна функция, которую мы передам в параметр метода post, она обрабатывает результат запроса... Для меня это понятная и привычная концепция, но читать её не очень удобно. Один целостный функционал разбивается на 2 функции. async await - это такой синтаксический сахар, который позволяет оставить запись этого функционала в рамках одного метода. Я так понял, что когда мы пишем async - это указание компилятору, что внутри метод будет разделён на 2 или более "подметодов". И разделителем выступает вызов методов с ключевым словом await. Всё что до него и сам await метод выполняются в первом "подметоде", а всё что после await как бы попадает в отдельную функцию ("подметод"), которая вызовется спустя время...
@omoloni4 жыл бұрын
14:31 нужно ещё привязать к времени, потому что у меня она за секунду успевает на 2700 переместиться иначе у всех скорость разная будет
@azerqgaming Жыл бұрын
C# такой: "Я подсмотрю у тебя, JS?" JS: "Да, только не списывай 1 в 1." C#: "Да, да 😆"
@XpucT Жыл бұрын
Для разнообразия точку с запятой в конце строк буду ставить
@azerqgaming Жыл бұрын
@@XpucT кстати TypeScript иногда очень Шарп напоминает, чувствуется рука Майкрософт :)
@XpucT Жыл бұрын
@@azerqgaming +++
@alexandrpyatov68964 жыл бұрын
Спасибо, хорошая подача.
@ilya92612 жыл бұрын
Вот еще очень понятный пример, как это работает: 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
@stemykay47733 жыл бұрын
Очень и очень хорошо)
@Alex_Lutor2 жыл бұрын
Спасибо ! Очень во время ! Весь день убил , прогрессбар даже с бэкграундворкером организовал , а у вас гораздо практичнее!
@КапляРосы-ш6э4 жыл бұрын
спасибо) очень интересно)
@eutiopiy27004 жыл бұрын
кстати есть фишка можно писать не label1.Text = i.ToString(); а label1.Text = i+""; так можно сократить код)
@ilyastrojnov76274 жыл бұрын
Ах тыж хитрая жопа)
@RUSlTUZ4 жыл бұрын
label1.Text = $"{i}"
@eutiopiy27004 жыл бұрын
@@RUSlTUZ у меня всёравно код короче получаеться)
@nifertum95144 жыл бұрын
Лучший
@MileshkoVladimir4 жыл бұрын
Привет всем! Подскажите, кто в курсе. Есть ли принципиальная разница в вариантах если: прописать асинхронный метод, например async byte ReadBuffer(){...}, и вызвать его через Task.Run(() => ReadBuffer();), как рассказывается в этом уроке, или такой вариант: реализовать метод как задачу async Task ReadBuff(){...} и вызвать таском вот так Task.Run(ReadBuff); Есть ли какая-то разница, кроме сокращения кода при вызове метода?
@XpucT4 жыл бұрын
Привет 🖐 В данном случае разницы нет вообще. И так и так можно.
@MileshkoVladimir4 жыл бұрын
@@XpucT отлично! Большое спасибо за уроки! Классно рассказываете 😉👌
@kashiroko66324 жыл бұрын
Так как мне понравилось делать домашку, но в уроках я ее перестал встечать, то решил сам придумать себе задание Программа имеет три массива. Первый - все числа от 0 до 100. Второй должен быть заполнен нечетными числами, а третий всеми четными в этом диапазоне=) Исходный код: using System; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); button1.Text = "Заполнить мир"; button2.Text = "Посчитать"; } int[] world = new int[100]; int[] first= new int[100]; int[] second = new int[100]; private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 100; i++) world[i] = i; } private void button2_Click(object sender, EventArgs e) { GetMyNumbers(); } async void GetMyNumbers() { for (int i = 0; i < 100; i++) { if (world[i] % 2 == 0) { second[i] = world[i]; textBox2.Text = second[i].ToString(); } else {first[i] = world[i]; textBox1.Text = first[i].ToString(); } await Task.Delay(350); } } } }
@XpucT4 жыл бұрын
Могу лучше дать домашку =) Сделай так, чтобы кнопка убегала от курсора. Но начни с простого: сделай так, чтобы кнопка дёргалась пока на ней мышь.
@kashiroko66324 жыл бұрын
@@XpucT вариант, чтобы кнопка дергалась: using System; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool epilepsy_b = false; async void epilepsy() { epilepsy_b = true; while (epilepsy_b != false) { button2.Height += 20; button2.Width += 20; await Task.Delay(50); button2.Height -= 20; button2.Width -= 20; await Task.Delay(350); } } private void button2_MouseHover(object sender, EventArgs e) { epilepsy_b = true; epilepsy(); } private void button2_MouseLeave(object sender, EventArgs e) { epilepsy_b = false; } } }
@@XpucT Я пока сделал, чтобы кнопка убегала от курсора. Единственное я не могу понять, в этой строке я же сделал защиту, чтобы кнопка не выходила за грани формы this.Width< point_x + button2.Width + 50. (это в условном операторе) sourse code: using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } int point_x = 30; int point_y = 20; private void button2_MouseHover(object sender, EventArgs e) { if (this.Width< point_x + button2.Width + 50){ button2.Location = new System.Drawing.Point(x: point_x = 15, y: point_y += 100); }else if (this.Width >( point_x + button2.Width + 50) ){ button2.Location = new System.Drawing.Point(x: point_x += 100, y: button2.Location.Y); } } }
@kashiroko66324 жыл бұрын
@@XpucT Ютуб сжимает коды, давайте в вк спишемся?
@brayanhustler935 жыл бұрын
можно ту же самую телегу реализовать создав отдельный поток. И выполнять асинхронный код в нем. Так даже уменьшается нагрузка на проц
@dmitryyakovlev30033 жыл бұрын
ОГРОМНОЕ спасибо
@dmitryyakovlev30033 жыл бұрын
делал генерацию уровней в игре, очень пригодились эти функции
@ДмитрийЧернышев-п3ь5 жыл бұрын
Первая действительно сложная тема для меня. Раньше немного игрался с Delphi и PHP, там такого нет (или не добрался)
@ДмитрийКачусов-к5т5 жыл бұрын
Спасибо за видео, отлично объяснил)))))
@denissaygin33714 жыл бұрын
То чувство, когда сначала узнал, что такое генераторы, потом корутины, и только сейчас наконец до конца понял принцип работы async-await
@XpucT4 жыл бұрын
Точно также Я не понимал, когда читал книги и изучал курсы - зачем Мне строить ракету на луну, чтобы просто удалить файл... Зачееем?? Поэтому в своём курсе Я иду в своём порядке. Сначала задача, потом идея, потом решение. Без пустых, давайте построим шатл...
@ТимофейБелый-ы8ч4 жыл бұрын
Все понятно и интересно, спасибо за урок!
@3dportableinc64 Жыл бұрын
спасибо пригодилось
@potuStoronka5 жыл бұрын
Спасибо, урок веселый и доступным языком
@sarbasov3 жыл бұрын
4:50 а если убрать await и async, разве не будет асинхронности? Task.Run() же вроде так и так сработает асинхронно.
@XpucT3 жыл бұрын
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 требует ждать и выполнять всё последовательно - по завершении.
@РусланГаллямов-и9х2 жыл бұрын
Слово асинхронно используется потому, что задачи стартуют и заканчиваются не одновременно.
@vmalyk16505 жыл бұрын
XpucT а будут другие технологии рассмотрены ( ASP.NET и другие) ?
@XpucT5 жыл бұрын
Может быть.
@MileshkoVladimir4 жыл бұрын
Да вот по ASP. NET бы такие понятные уроки запилить - было бы вообще пушка! А то там реально дофига в чем разбираться нужно. Тоже хочу его освоить...
@НиколайЕвгеньевичСветлов4 жыл бұрын
MVC
@АндрейГоляновский-х4й4 жыл бұрын
в описании класса Point такие свойства, Как x и y определены как ReadOnly, либо { get; }. Поэтому, после инициализации объекта Point определить новые значения для координат нельзя. Чтобы определить новые координаты для контролов приходится создавать новый объект Point. И вот сейчас я понимаю насколько это убого, если необходима подобного рода анимация контролов. Получается каждую миллисекунду создается новый объект Point и процессор+граф.ядро полностью перерисовывает Кнопку.... С ProgresBar тоже ужасно все, он на каждой итерации полностью себя перерисовывает и почти никогда не доходит до конца. Даже метод (не помню название), который заставляет ожидать поток, пока бар себя не перерисует, помогает не до конца, почти всегда последние процентов 5 идут с резким заполнением.
@НиколайЕвгеньевичСветлов4 жыл бұрын
Со строками аналогично.
@happyfog152 жыл бұрын
Мегаполезный материал спасибо! ЗЫ. А начальник мне запретил пользоваться While (вернее настоятельно попросил его избегать) Для него он потенциально опасен, как и Goto ) Надо ему рассказать про асинхронность, чтобы он не переживал что мой очередной кривой цикл всё подвесит.
@XpucT2 жыл бұрын
Более того, если в _while_ расширить условие до 3 попыток к примеру, то ничего страшного быть не может. Кстати, тот же _goto_ можно всегда if`ать.
@happyfog152 жыл бұрын
@@XpucT спасибо, надеюсь скоро и до этого дойду)
@НиколайТорощин-е6э5 жыл бұрын
Спасибо) при создании бургер меню на форме, сильно выручает) только что заюзал) 👍
@toxicknight30795 жыл бұрын
Насчет того, почему нельзя было написать button1.Location.X++. Тут все дело в том, что Location является СВОЙСТВОМ, в котором содержится СТРУКТУРА Point. А get свойств, в случае со структурами, возвращает КОПИЮ объекта структуры, а не ссылку на объект. Т.е. говоря простыми словами, когда ты пишешь button1.Location.X++, ты обращаешься к get свойства Location, get возвращает тебе копию Point, содержащегося в Location, и в этой копии Point ты увеличиваешь X на 1. В самом же button1 значение X в Location не меняется, т.к. изменения были в копии. Компилятор видит, что выражение button1.Location.X++ ничему не присваивается, понимает, что ты на самом деле хотел изменить Location.X и выдает ошибку.
@volodymyrmatselyukh88085 жыл бұрын
А я думал что просто там public get {} private set {}
@toxicknight30795 жыл бұрын
@@volodymyrmatselyukh8808, там так и есть, открытое свойство Location с get. Просто если свойство возвращает структуру, то оно возвращает копию структуры (а если экземпляр класса, то ссылку на этот экземпляр).
@volodymyrmatselyukh88085 жыл бұрын
@@toxicknight3079 На самом деле, то что ето структура или нет здесь роли не играет. Ми не можем присвоить значение из-за того что private set;. Если би бил public set; и ми би написали button1.Location.X ++; тогда значение би увиличилось на 1 для свойства X обьекта Location. dotnetfiddle.net/JTqCNj
@toxicknight30795 жыл бұрын
@@volodymyrmatselyukh8808, точно. Забыл, что инкремент устроен сложнее, чем кажется.
@volodymyrmatselyukh88085 жыл бұрын
@@toxicknight3079 тут не в инкременте дело :) тоесть если написать button1.Location.X = 5; так будет работать тоже только сеттер должен бить public.
@hop1732 жыл бұрын
Почему я так поздно нашёл это видео, когда уже не актуально)
@XpucT2 жыл бұрын
@hop1732 жыл бұрын
@@XpucT не увидел ролика, если есть ткните пальцем, если нет то очень не помешал бы разговор на тему EF и как это дело работает изнутри)
@aleksandrgaziev44704 жыл бұрын
Отличный урок. А как ты так быстро за комментировал строку?
@XpucT4 жыл бұрын
В Настройках перебиндил горячие клавиши на Закомментировать и Раскомментировать - F2 и Ctrl + F2 соответственно. Мышь X7 у Меня и на ней Я себе забиндил F2.
@aleksandrgaziev44704 жыл бұрын
Спасибо
@Бот5329-и5г2 жыл бұрын
То есть получается что await это ожидание внутри асинхронного метода? И нам не важно где мы его поставим но оно почемуто должно там обязательно быть?
@XpucT2 жыл бұрын
Примерно так =)
@anatgu33975 жыл бұрын
Спасибо ! Тем не менее остался один , возможно глупый вопрос: Представьте себе директорию , в котором уж ооочень много файлов и они большого размера, кроме того - постоянно появляются новые. Какой будет самый эффективный способ для их чтения ? Читать в Parallel.foreach каждый файл , или же асинхронно ? Или опять , цикл по файлам в обычном foreach , а строки забирать в Paralell.foreach? Или же Parallel.foreach по файлам , но само чтение асинхронное ? Простите , что возможно не в тему данного ролика.
@anatgu33975 жыл бұрын
Или же Threadами )
@XpucT5 жыл бұрын
@@anatgu3397 await Task.Run(() => { using (BufferedStream stream = new BufferedStream(File.OpenRead(file), 100000)) // фокусы-покусы }
@anatgu33975 жыл бұрын
@@XpucT благодарю , буду пробовать.
@seldemirov4 жыл бұрын
Классно рассказываешь! Есть вопрос. Есть ли способ сбросить выполнение async метода? Например, что бы прервать выполнение метода во время Delay.
@XpucT4 жыл бұрын
Делать перед Delay проверку if. А если пауза длинная, то разбить её на несколько и уже внутри сделать проверку. await Task.Delay(330); if (уже не надо) return; await Task.Delay(330); if (уже не надо) return; await Task.Delay(330);
@seldemirov4 жыл бұрын
@@XpucT А из другого метода сбросить этот не получится?
@XpucT4 жыл бұрын
@@seldemirov сделать так, чтобы метод принимал проверку, нужно ли сбрасывать. Про методы есть отдельное видео в Уроках. Там показываю, как методы могут принимать аргументы.
@seldemirov4 жыл бұрын
@@XpucT Спасибо! Буду смотреть и разбираться.
@Iamnotagenius4 жыл бұрын
Немного странно, что Вы даёте данные операторы раньше, чем лямбда выражение (и уж тем более раньше чем такие базовые вещи, такие как циклы for и foreach и массивы), ведь делегаты и лямбда выражения можно использовать без этих асинков и эвейтов, а асинки и эвейты нельзя использовать без лямбда выражений. Уроки-то хорошие, но мне кажется что порядок немного не тот.
@XpucT4 жыл бұрын
Порядок тот, продолжайте просмотр =)
@Iamnotagenius4 жыл бұрын
@@XpucT ну как скажете) давно хотел про многопоточность уроки посмотреть
@anderwafe4 жыл бұрын
а после завершения асинхронной части метода он все равно продолжает работать асинхронно, либо остальные потоки останавливаются до завершения данного метода?
@XpucT4 жыл бұрын
Нет, асинхронность заканчивается на блоке кода и ограничена следующими символами: }); То есть таким образом инструкции внутри завершены, и дальше всё пашет синхронно. Но если сам по себе метод асинхронный, то место, откуда был вызван метод, не будет ждать завершения метода. Пересмотрите ещё раз.
@МаксимРадюш-ч6т Жыл бұрын
а зачем это если есть Thread?
@БлогРазработчикаигр4 жыл бұрын
Я бы хотел такой вопрос задать, все классно и замечательно , но как в асинхронном методе заполнять label итд текст боксы, у меня постоянно в этой конструкции выдает ошибку await Task.Run(()=> тут пример код который записывает в лейбл });
@XpucT4 жыл бұрын
Потому что управляете кодом в режиме Debug, а не Release. Ответ тут: kzbin.info/www/bejne/rHnUeaWcbpZniqM однако, советую не нарушать последовательность просмотра видео. Временное решение - запишите это ↓ где-нибудь в загрузке формы: CheckForIllegalCrossThreadCalls = false; Подчёркиваю - это временное решение. Не привыкайте.
@БлогРазработчикаигр4 жыл бұрын
@@XpucT Спасибо большое!
@Solomius2 жыл бұрын
Забавно, всегда использовал для этих вещей таймер. По сути тот же функционал, задержки есть, выполняется в фоне. Можно более подробно рассказать в чем разница
@srulik53344 жыл бұрын
какая замечательная вещь async void cf() { // подпольный обработчик закрытия проги await Task.Run(() => { try { while(!Form1.ActiveForm.IsDisposed) { } } catch { } }); //System.Windows.Forms.MessageBox.Show("done"); не успеем увидеть, видимо потому что хэндл формы удаляется System.IO.File.WriteAllText(@"C:\Users\Srul\Desktop ew.txt", "done!"); }