Асинхронность (async, await) и многопоточность (thread) в C# - Учим Шарп #17

preview_player
Показать описание
Асинхронность(async, await) и многопоточность (thread) в языке программирования C#

На этом занятии мы познакомимся с понятиями конкурентность, параллельность, многопоточность, асинхронность в языке программирования C#. Научимся создавать новые потоки (thread), а также работать с задачами (task) с помощью асинхронных операций async и await.
-----------
ПОДПИШИСЬ на соцсети:
-----------
ПОДДЕРЖИ развитие CODE BLOG:
-----------
СМОТРИ мои обучающие курсы:
-----------
Кстати, меня зовут Шванов Вадим, и я профессиональный .NET разработчик с 2011 года и автор этого канала CODE BLOG. Я рассказываю про IT технологии и веду абсолютно бесплатный курс по языку C# с нуля. В его рамках мы рассмотрим как базовый синтаксис языка C Sharp, так и его практическое применение и специальные технологии, такие как ASP .NET, .NET Core, ASP.NET MVC, Unity, WPF, структуры данных и алгоритмы, с#, dotnet, паттерны проектирования, информатика, csharp, программное обеспечение и многое другое. Для меня важно не только показать практическое применение языка си шарп, но и объяснить основную идею и базовые понятия Computer Science. В качестве основного инструмента разработки используется Visual Studio c# и проекты на Visual c#. Если вам нравятся такие каналы как хауди хо, айти борода, Soer или ExtremeCode, то здесь вам точно понравится.
-----------
#codeblog #программирование #csharp #ityoutubersru #программист #разработка
Рекомендации по теме
Комментарии
Автор

На этом занятии мы познакомимся с понятиями конкурентность, параллельность, многопоточность, асинхронность в языке программирования C#. Научимся создавать новые потоки (thread), а также работать с задачами (task) с помощью асинхронных операций async и await.

CODEBLOG
Автор

0:00 введение
4:58 конкурентность
6:27 параллельность
8:37 многопоточность
11:33 асинхронное программирование 1
13:07 чат 1
15:36 асинхронное программирование 2
21:04 практика
22:35 чат 2
24:07 практика многопоточность 1
25:36 перезапуск трансляции
29:41 практика многопоточность 2

vm
Автор

52:30 Можно же сделать Main асинхронным. Объяви async static Task Main(string[] args) и поставь await перед DoWorkAsync(); Тогда вывод будет более последовательный
Begin Main
Begin Async
DoWork
DoWork
DoWork
DoWork
DoWork
DoWork
DoWork
DoWork
DoWork
DoWork
End Async
Continue Main
Main
Main
Main
Main
Main
Main
Main
Main
Main
Main
End Main

HELIATROS
Автор

Вадим, у тебя классные уроки! Хоть и давно это уже было. Спасибо тебе!

OrinokoRiver
Автор

Про асинхронность, извини, ты совсем не о том говоришь что нужно людям знать. Асинхронные задачи вполне могут быть важными и связанными со всей остальной программой. Дело не в том, что где-то "параллельно" что-то делается в другом потоке из thread pool - совершенно не важно как технически виртуальная машина это делает. Смысл в том, что в синхронном режиме все команды выполняются последовательно, и если будет команда которая выполняется долго (типа получения данных по сети), то это будет замедлять работу программы, так как нужно дождаться выполнения. Асинхронность в свою очередь предполагает, что не дожидаясь выполнения функции программа выйдет из нее и пойдет дальше, затем вернется к выполнению когда данные будут готовы. Поэтому проблем с общими ресурсами, доступом к общей памяти и т.п. нет, потому что выполняется НЕ ПАРАЛЛЕЛЬНО, а просто в другой последовательности.

xezdx
Автор

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

xezdx
Автор

25:40 - Начало отладки видео​. Дальше 3 минуты можно вообще не смотреть. Прошу прощения за технические неполадки
28:30 - Перемотать сюда. Лаги видеокарты закончились. Оказалось SLI с OBS вообще не дружит...

CODEBLOG
Автор

2 года уже прошло, не знаю, увидел ли ты уже, но код в vs можно форматировать сочетанием ctrl + k + d. Он сам ставит пробелы (внутри циклов, например), отступы добавляет или убирает, в зависимости от вложенности

ЛеонидШиринкин-чг
Автор

Кто первый встал — того и папки! Тот и папка! Тьфу, того и тапки!!!

Grapeoff
Автор

Спасибо за труд!
лукас и коммент в поддержку канала!

vladisslavss
Автор

Кто смотрит на 29:45, после перезапуска, перестанет мерцать. Не расходимся!)))

atler
Автор

Спасибо за обучающий стрим! Ваш блог очень сильно мне помог)) Респект)

Упырь-нб
Автор

Для епилептиков можете после когда вывода поставить Thread.Sleep(400); будет по медленее все выводиться

Lorienlmaster
Автор

Кстати, метод Main можно сделать Асинхронным!
Только нужно заменить возращаемое значение void на Таску))

Пример:


static async Task Main()
{
await Task.Delay(2000);
Console.WriteLine("Ждал 2 секунды, лол");
await Task.Delay(5000);
Console.WriteLine("А теперь 5 сек)");


Console.ReadKey();
}
Что-то на подобии этого)

progfa
Автор

Резануло по ушам: "Что бы не думали что я богатый"

Быть богатым это нормально! Спасибо за урок!

DVA-Play
Автор

35:36 чем плох такой вот вариант?
Thread thread2 = new Thread(() => DoWork2(int.MaxValue));

BrownAleks
Автор

Вадим тебе нужно перепаять контакты ! у меня тоже так было на старом ламповом телевизоре в детстве когда любимый ну погоди смотрел ...

АлексДжаванов
Автор

Подскажите с lock запутался, два класса записывают в один фаил разные данные в 2 потока, так как одновременно их обратиться к файлу они не могут по идее надо один залочить. Я для этого объявляю как на вашем примере object lock в первом классе и object lock во втором классе и выделяю локом цикл который записывает данные в фаил... вот как я понимаю- кто первый из потоков добрался до лока тот и за лочился до тех пор пока не закончит... правильно????

andreyartemov
Автор

Здравствуйте, мастер. Я разбираюсь с клиент серв приложениями и параллельно с многопоточностью. Сделал тестовую программу, обращающуюся в к элементу формы в потоке. В результате при закрытии попадаю в исключение "Доступ к ликвидированному объекту невозможен.
Имя объекта: "Form1"."
. Я могу конечно его отловить, но.... Пытался заключать invoke в проверку на IsDisposed (Существование формы)... Не помогло. Еще раз спасибо Вам большое за все.

pavelchagovskiy
Автор

Доброго времени суток! Подскажите каким образом можно исправить ошибку ниже... используя Асинхронный метод (async/await)

когда Запускаем поток таким образом - все работает
new Thread(() =>
{
Invoke((MethodInvoker)(() =>
{
//тут выполняем код
}));
}).Start();



Когда вызываю асинхронный метод выдается ошибка, как ее исправить?
async Task MetodAsync()
{
await Task.Run(()=>
{
//тут выполняем код
}
);
}
Выходит ошибка:
"Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан."

oliviacolins