@@kastyel1990 приложение пожирает слишком много отделенной ей памяти, и если нет настроек в докере/кубере, то приложение просто перестанет выполнять что либо из за outOfmemory exception, и множества других ошибок. В кубере вроде по дефолту будет рестарт преложения ( тобишь твое приложение будет недоступно на протяжение пару минут), когда я работал около биг даты - это было чревато очередью в несколько миллионов необработанных сообщений ( из за чего юзеры получали обновления слишком долго) , так же увеличится время выполнения операций и тому подобное
@@kastyel1990 да и представь, что будет с твоим компьютером, если у тебя 4гб озы, а приложение начнет жрать и упираться в потолок ресурсов компьютера ( это синие экраны, дикие лаги)
Салам! Спасибо Бро! Безконечный Респект! Твои уроки оочень полезные и ты хорошо объесняешь! Из твоих уроков я многого научился и делаю качественные проекты! Ты лучший! Не слушай других, продолжай!
Хачатур, да тому, что люди пытаются придраться к твоему коду, есть простое объяснение. Мне кажется, что те люди, не новички, а имеющие хоть какой-то опыт, но видя с тебе профессионала, пытаются как бы себе самим доказать, что мол я не хуже этого профи Хачатура. Представляешь, как приятно, когда ты смог поправить самого гуру какого-нибудь. Совсем новички (я в их числе) просто восхищаются и хотят так же. Середнячки действуют, как я описал выше. Это не потому, что они хотят именно тебя оскорбить или задеть, а потому, что хотят доказать сами себе что-либо. И это в принципе нормально: хотеть быть лучше, чем учитель. Ну а совсем боги опытные, они уже все эти стадии прошли, и им не нужно ничего никому доказывать.
Вспомнился случай... Пошел я однажды давно на небезызвестный кибер-форум, что-то там узнать, ну и к вопросу приложил часть своего кода, по которому был вопрос. Так вот местные там мсье, сказали что-то типа "писать сначала научитесь, а потом вопросы задавайте") И начали тыкать в такие места кода, типа вот тут переменную нельзя такую использовать, а вот это надо с большой буквы писать, а там вообще строки местами поменять надо... И вот как-то даже обидно стало, ведь код то был рабочий, и личный взгляд тогдашнего меня, вполне себе читабельный, а главное, что вопрос вообще не относился к этим самым "косякам". Наверное с тех пор, показывая свою писанину, заранее прошу за нее прощения, если вдруг кого-то чем-то зацепит😁 Понятное дело что есть какие-то общепринятые нормы и приавила, но, во-первых, подчерк у всех разный, а во-вторых, не надо кидаться на новичков в особенности за какие-то недочеты, лучше подскажите и поправьте, а если не можете сделать это корректно, то будьте еще умнее и промолчите...
Ру комьюнити в программировании вообще само по себе кусок токсичного дерьма. Да, даже если на стеке расписывают все подробно (что иногда может пригодиться), то все равно там человеческое отношение совершенно другое
Хачатур, я только недавно нашла Ваш канал, но у Вас узнала намного больше, гораздо подробнее, намного понятнее чем на курсах Skillbox. Спасибо за ваши видео, баньте всех завистников. Они бы лучше свои программы писали хорошо, чем пытались задеть Вас. Уверена у большинства из них нет ни одного годного продукта. Так что продолжайте развиваться, а там может и мы начинающие чему-нибудь у вас научимся.👍
Продолжай так как ты думаешь. Ты идеально объясняешь на живых примерах. Благодаря твоих видео реально я создал очень большой CRM систему. Реально работает СПАСИБО Привет из АРМЕНИИ ))
ЫЫЫ, так порадовало когда ты бул показал, ведь когда-то на плюсах я сам до этого додумался. Прикольно и приятно :) +: Фразу "потому что канселейшн-токен послал отмену" можно вроде вообще мемом сделать
Хачатур, привет. Смотрю твои видосы буквально недавно, и хочу сказать спасибо за твой труд, за то что тебе это нравится, за то что ты такой какой есть, за твою уникальную подачу материала! )) Не знаю, в чём то узнаю реверсеров из олдов)) По поводу мессий из комментов - ваще забей! Кому чо не нравится, пусть не смотрят и идут лесом, а я смотрел, и буду смотреть твои видосы, снимай исчо!
Коме интересно почему на 7:00 выдало ошибку. Дело в том что асинхронные методы по идеи должны возвращать типы Task и Task, но еще добавили поддержку возвращаемого типа void, чтобы события могли вызывать асинхронные методы. Поэтому в этом случае нельзя менять void на Task так как сигнатура метода Button1_Click не соответствует сигнатуре события button.OnClick.
Иногда это называется долбо…зм. Например, человек пишет простейшее приложение, а ему предлагают применить там все возможные паттерны ООП, а иначе типа «зачем тебе понадобился ООЯП?». Иной раз что-то простое можно быстрее написать тупо в процедурном стиле и не морочить никому голову, особенно когда ты знаешь, что это приложение никогда не станет аналогом офиса или фотошопа, да и вообще у него будет одна единственная версия, первая и последняя, которая будет работать. Но нет, есть умники, которые тебя будут тыкать, что как это так, не проработал архитектуру приложения. Хотят чтобы ты потратил не 4-5 часов на написание программулины, а 4-5 дней минимум.
Спасибо за урок) Честно говоря про токен так и не понял, это просто дополнительный if в коде, по сути ведь это тот же бул, просто больше засоряет код и портит немного оптимизацию) Просто сам недавно его пытался использовать, но прикола так и не понял)
я так понял из видоса есть два варианта ...1 если вас послали и вы нах свалили .... 2 вас послали и вы культурно попрощялись и вышли )))) токинь мокинь )))) для меня эт как в лес за дровами с пилкой от лобзика ))))
@@АлександрКонев-й9п Я им и не занимаюсь, просто знаю, что правильно "тюпл". "Тапл" - это, видимо, какая-то современная интерпретация, как кофе среднего рода. Кстати, в комментариях к вашему видео как раз люди пишут, что в англиях и америках люди тюпл говорят. Яндекс-переводчик дает "тюпл", гугель - "тапл".
Да и еще вопрос... Сделал информативную формочку с данными, которая генерирует поля на основании sql процедурки. Теперь клиент просит ее выводить на печать. Я начал костылить это через report viewer, но может есть более простые способы?
Привет, Христ! Можешь подсказать почему когда я запускаю очистку в Win 10 Tweaker у меня зависает на пункте "Очистка кэша обновление Windws". Возможно это тебе поможет , но когда я запускаю Win 10 Tweaker на Windwows SandBox и захожу в системную информацию там вылазит ошибка: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parametr name: index
Не ожидал, что вы ответите, а этот вариант я уже применил, спасибо вам! теперь выскакивает ошибка {"Cannot access a disposed object. Object name: 'Form1'."}. Но это уже другая история)
Здравствуй Хачатур. А подскажи такую штуку. Я все еще пишу бота и возник вопрос по теме. Для сохранения настроек пользователя, пишу их в файл в потоке с некой задержкой. Можно ли в этой задаче проверять наличие основного процесса программы, для завершения фонового процесса обновления файла? Я это делал, ибо пока не придумал хорошего решения по отлову закрытия моего консольного приложения.
Привет 🖐 Я лично так и делаю с ботом. Тушу его и продолжаю работу, т.к. консоль не закрывается, всё работает дальше, как часы, как будто ничего не было.
While true.. а true у нас всегда - больше всего угараю с таких мини-замечаний. Юмор решает, когда выбираешь по чьим урокам учиться Хачатур, скажи, пожалуйста, что думаешь про Rust (для тех, кому пожестче)
Rust - идеален для каких-то системных утилит без UI или для каких-то web сервисов. То есть специфика не совсем та. Делать на нем какое-то приложение с интерфейсом такое себе. Там есть какая-то связка с GTK, конечно. Но все это пока не очень готово для создания каких-то приложений заточенных под UI. Хороших родных библиотек пока нет вообще вроде. То есть это вообще отдельная история и с тем же C# никак не коррелирует. Ну только если в плане написания бэкенда и микросервисов. Про Rust уместно задавать вопросы тем, кто пишет на C или C++. Они, если не хотят отстать от жизни, должны уже так или иначе присматриваться к Rust’у.
@@phat80 Ну, я как бы ничего не говорил про специфику или корреляции с C#. Ну, раз на то пошло, выскажу и свое ИМХО) Пройдет еще год-два и он будет просто идеален. Новые GUIшные либы появляются чуть ли не каждый месяц. Большинство из них сырые. Но есть вполне сносные, например, Druid. Если нужно еще красивее, то лучший варик на данный момент - привязки к FLTK th-cam.com/video/dcI4J_bj8qc/w-d-xo.html. Конечно, до WPF пока далеко. Да и походу это что-то типа мирового тренда.. десктопных приложух пишут все меньше и меньше.. и на это место, к сожалению, приходит Electron. Те, кто давно пишет на C/C++ чаще всего ненавидят Rust (он же "убийца"). Мне кажется, дольше всего плюсы продержатся в геймдеве. О каком-то противостоянии C# vs Rust говорить не приходится. Понятно, что Rust'а не будет много хотя бы из-за высокого порога входа. У C# главные соперники - Python и Go. Python станет как англ. язык для всех кодеров, ибо лучшего инструмента для прототипирования не сыскать. А с Go придется мириться, как миримся с JS. Поэтому чтобы Go окончательно не захватил мир, надо продвигать .NET всеми возможными способами)) Как насчет F#, например..
@@gesriot Хайп вокруг Electron’а вроде уже давно стих. Какую-то нишу он занял, но я не могу сказать, что большую. Сейчас модно на Flutter’е (Dart) ваять приложения, хотя для десктопа и нет продакшн реди версии. Но лично мне не заходят ни electron, ни flutter.
@@phat80 Хайп-то может и стих.. но нас ждет еще одна гидра в лице React Native. А Flutter для андроида хорош вроде. Быстрее бы микрософт уже унифицировал свой MAUI..
Посмотрел 2 раза, но всё равно немного не понял. Токен нужен для того чтобы останавливать именно этот await, и чтобы он не оставался в памяти и не крутил ничего не делающие циклы? И ещё, потом мы засунули его в if, как булл переменную, и если у нас есть запрос на остановку то он как бы брейкает весь метод. Но если сделать такой же бул need как и в начале, и засунуть его не в while а в if (как сделали с токеном) то он будет так же работать как и токен? Ну а то что мы засунули st через запятую прямо к Task.Run я вообще не понял как работает... Объясните плз :)
Всё правильно. Ты вероятно просто ещё не делал столько вызовов сложных, где многим нужно получить токен отмены. Я поэтому и не стал городить, ибо это придёт со временем. Главное, чтобы Ты знал, когда начнёшь работать с https или чем-то ***Asynk, можно тушить всё через токены, а не просто рубить с плеча, грубо прекращая какой-то цикл. В большинстве случаев bool достаточно, но важно отметить, что есть и система токенов на отмену операции, если определённый метод это умеет.
У меня есть new Thread.Start(), и после нажатия на кнопку, надо завершить этот поток. Метод Thread.Abort() не подходит, т.к. я не могу обратиться к нему по имени, я его создавал через new. Вопрос: как остановить поток по нажатию кнопки? Сам пока что накостылял внутри new Thread асинк функцию которая каждую секунду проверяет bool и специально ловит ошибку в try catch коде, чтобы остановить поток (дада, такой бред)
Привет! Слушай, а есть ли замена Thread.Abort() на новом дотнете? Начиная с версии дотнет 5 и выше, эту функцию вырезали и не предоставили ничего взамен, интернет уже весь просмотрел, всё что предлагают - проверять какой-нибудь bool на какой-то строчке кода, но это полный отстой по сравнению с предыдущим Thread.Abort(), который сам мог отменить поток на любой строчке кода вне зависимости от типа задачи. Единственную замену, которую я нашёл - это Task.Interrupt() и потом естественно Dispose(), но проблема в том, что метод Interrupt работает только тогда, когда таск спит, либо есть делэй, то есть ты пошлёшь таску интеррапт, а он остановится только тогда, когда дойдёт до строчки Thread.Sleep() внутри таска или ей подобной строки, а ведь такой строки вовсе может и не быть, да и хотелось нормального функционала отмены потока / задачи, когда как только пошлёшь ему Thread.Abort(), он сразу же прервётся.
Привет 🖐 Давно уже с Thread, потому что сейчас все вопросы решаются Task`ом. Поверь, лучше уже сейчас всё начать переписывать, потому что потом будет тяжелее.
@@XpucT да могу и на таск всё перегнать конечно, но говорю, вот в таске только единственный вариант нашёл - Task.Interrupt(), но он сработает только тогда, когда этот таск дойдёт до строчки Thread.Sleep(), а на всех остальных команда интеррапт не понесёт эффекта. Вот интересуюсь, может Вы знаете способ работающей принудительной остановки таска вне зависимости от выполняемой этим таском команды?
@@mikhailskylark8417 Я к тому и говорю, что даже Thread.Sleep() нужно сразу менять на await Task.Delay(); А чтобы грубо не прерывать, но при это очень хочется, то есть while (bool). И нет, это не костыль. Это нормально.
Хачатур, почему в первом примере у меня ошибка System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан." Код из видео async void button1_Click(object sender, EventArgs e) { await Task.Run(async () => { while (true) { label1.Text += "1"; await Task.Delay(1000); } }); }
@@serpotapov у меня такая же ошибка, рилиз мод решает. Но из видео(th-cam.com/video/r5Qd-EI-pjU/w-d-xo.html) я не понял причину именно зачем не работал в дебаг моде? можете обяснить?
@@puser-yh9lv7kl1h наконец то нашел ответ, Визуал студио ищет ошибку между тредами, когда включего дебаг мод, нам надо отключить эту поиск ошибок между тредами - Control.CheckForIllegalCrossThreadCalls = false;
Слушай всегда пишу после твоих видео сам код для запоминания, и мне выдает ошибку : System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан."
@@XpucT ну я серьёзно сегодня целый день ковыряюсь и гугл отвечать не хочет. По одной кнопке запускаю поток по другой останавливают и потом по первой опять но тишина... он умер
Зачем всё-таки двухуровневая архитектура? Source он как бы лишний. Можно было бы создать инстанс токена через оператор new и раздать его всем? Не поделитесь своими догадками, зачем Microsoft так сделали?
если инициализируете соурсы токены в цикле каком нибудь - не забывайте их обернуть в юзинги, а то словите утечку памяти)
они оба(CancellationTokenSource и CancellationToken ) создают утечку памяти или один из них? спасибо
@@johnrollan2256 CancellationTokenSource
Вопоос, а на что влияет утечка памяти? Ибо обьяснений много, или я тугой, но не до конца понимаю.
@@kastyel1990 приложение пожирает слишком много отделенной ей памяти, и если нет настроек в докере/кубере, то приложение просто перестанет выполнять что либо из за outOfmemory exception, и множества других ошибок. В кубере вроде по дефолту будет рестарт преложения ( тобишь твое приложение будет недоступно на протяжение пару минут), когда я работал около биг даты - это было чревато очередью в несколько миллионов необработанных сообщений ( из за чего юзеры получали обновления слишком долго) , так же увеличится время выполнения операций и тому подобное
@@kastyel1990 да и представь, что будет с твоим компьютером, если у тебя 4гб озы, а приложение начнет жрать и упираться в потолок ресурсов компьютера ( это синие экраны, дикие лаги)
Салам!
Спасибо Бро! Безконечный Респект!
Твои уроки оочень полезные и ты хорошо объесняешь! Из твоих уроков я многого научился и делаю качественные проекты!
Ты лучший! Не слушай других, продолжай!
Самое лучшее объяснение CancellationToken🤘
Хачатур, да тому, что люди пытаются придраться к твоему коду, есть простое объяснение. Мне кажется, что те люди, не новички, а имеющие хоть какой-то опыт, но видя с тебе профессионала, пытаются как бы себе самим доказать, что мол я не хуже этого профи Хачатура. Представляешь, как приятно, когда ты смог поправить самого гуру какого-нибудь. Совсем новички (я в их числе) просто восхищаются и хотят так же. Середнячки действуют, как я описал выше. Это не потому, что они хотят именно тебя оскорбить или задеть, а потому, что хотят доказать сами себе что-либо. И это в принципе нормально: хотеть быть лучше, чем учитель. Ну а совсем боги опытные, они уже все эти стадии прошли, и им не нужно ничего никому доказывать.
Спасибо за новые возможности сам программирую уже 10лет а о многом даже и незнал
Вспомнился случай...
Пошел я однажды давно на небезызвестный кибер-форум, что-то там узнать, ну и к вопросу приложил часть своего кода, по которому был вопрос. Так вот местные там мсье, сказали что-то типа "писать сначала научитесь, а потом вопросы задавайте") И начали тыкать в такие места кода, типа вот тут переменную нельзя такую использовать, а вот это надо с большой буквы писать, а там вообще строки местами поменять надо... И вот как-то даже обидно стало, ведь код то был рабочий, и личный взгляд тогдашнего меня, вполне себе читабельный, а главное, что вопрос вообще не относился к этим самым "косякам".
Наверное с тех пор, показывая свою писанину, заранее прошу за нее прощения, если вдруг кого-то чем-то зацепит😁
Понятное дело что есть какие-то общепринятые нормы и приавила, но, во-первых, подчерк у всех разный, а во-вторых, не надо кидаться на новичков в особенности за какие-то недочеты, лучше подскажите и поправьте, а если не можете сделать это корректно, то будьте еще умнее и промолчите...
Ру комьюнити в программировании вообще само по себе кусок токсичного дерьма. Да, даже если на стеке расписывают все подробно (что иногда может пригодиться), то все равно там человеческое отношение совершенно другое
Хачатур, я только недавно нашла Ваш канал, но у Вас узнала намного больше, гораздо подробнее, намного понятнее чем на курсах Skillbox. Спасибо за ваши видео, баньте всех завистников. Они бы лучше свои программы писали хорошо, чем пытались задеть Вас. Уверена у большинства из них нет ни одного годного продукта. Так что продолжайте развиваться, а там может и мы начинающие чему-нибудь у вас научимся.👍
Спасибо, Наташ
Давай еще видео. Все очень просто и понятно. СПасибо.
Продолжай так как ты думаешь. Ты идеально объясняешь на живых примерах. Благодаря твоих видео реально я создал очень большой CRM систему. Реально работает СПАСИБО
Привет из АРМЕНИИ ))
ЫЫЫ, так порадовало когда ты бул показал, ведь когда-то на плюсах я сам до этого додумался. Прикольно и приятно :)
+: Фразу "потому что канселейшн-токен послал отмену" можно вроде вообще мемом сделать
друган спасибо за труды ты всё делаеш привильно .... дай БОГ тебе здаровья
Именно такой стиль преподавания лучше всего заходит, привет твоему коту!
Отличный урок! Спасибо.
Да ёпрст, супер видосы, вот, прям, огонь!
Хачатур, привет. Смотрю твои видосы буквально недавно, и хочу сказать спасибо за твой труд, за то что тебе это нравится, за то что ты такой какой есть, за твою уникальную подачу материала! )) Не знаю, в чём то узнаю реверсеров из олдов)) По поводу мессий из комментов - ваще забей! Кому чо не нравится, пусть не смотрят и идут лесом, а я смотрел, и буду смотреть твои видосы, снимай исчо!
Круто, как всегда!
Здравствуй!Благодарствую!)
@@XpucT Я бы стал спонсором канала, но кнопки нет((. Нужна альтернатива)). Ну прям очень-очень хочется!
Привет ув. Хачатур
Респект за то, что повысил еще на 7%
😇
🙏
Спасибо. Всё правильно делаешь.
Коме интересно почему на 7:00 выдало ошибку. Дело в том что асинхронные методы по идеи должны возвращать типы Task и Task, но еще добавили поддержку возвращаемого типа void, чтобы события могли вызывать асинхронные методы. Поэтому в этом случае нельзя менять void на Task так как сигнатура метода Button1_Click не соответствует сигнатуре события button.OnClick.
Молодец, продолжай !!! на хейт не обращай внимание...
Спасибо Вам огромное за полезный материал! Обожаю Ваши уроки! ✊🥰
А на душнил забейте, такие всегда будут выделываться в комментариях.
Этот комплекс называется - перфекционизм.
Иногда это называется долбо…зм. Например, человек пишет простейшее приложение, а ему предлагают применить там все возможные паттерны ООП, а иначе типа «зачем тебе понадобился ООЯП?». Иной раз что-то простое можно быстрее написать тупо в процедурном стиле и не морочить никому голову, особенно когда ты знаешь, что это приложение никогда не станет аналогом офиса или фотошопа, да и вообще у него будет одна единственная версия, первая и последняя, которая будет работать. Но нет, есть умники, которые тебя будут тыкать, что как это так, не проработал архитектуру приложения. Хотят чтобы ты потратил не 4-5 часов на написание программулины, а 4-5 дней минимум.
CancellationToken, мьютекс семафор нормальная тема, если у вас больше пяти потоков.
Спасибо за урок) Честно говоря про токен так и не понял, это просто дополнительный if в коде, по сути ведь это тот же бул, просто больше засоряет код и портит немного оптимизацию) Просто сам недавно его пытался использовать, но прикола так и не понял)
я так понял из видоса есть два варианта ...1 если вас послали и вы нах свалили .... 2 вас послали и вы культурно попрощялись и вышли )))) токинь мокинь )))) для меня эт как в лес за дровами с пилкой от лобзика ))))
Круто. Сделай видео урок по конечных автоматах на шарпе. Если используешь в своих проектах
Дурной тон это как я как раз в защиту Тапла сказал супротив параметров с out предлагаемых в комментарии.
Какой, нафиг, Тапл? Тюпл - правильно Хачатур произносит. Tuple, duplex, etc. Apple - эпл, так специально тут две "p" стоят, иначе бы эйпл читалось.
@@Richard-Gir m.th-cam.com/video/xWGcUbDeBmM/w-d-xo.html не стоит вам заниматься английским
@@АлександрКонев-й9п Я им и не занимаюсь, просто знаю, что правильно "тюпл". "Тапл" - это, видимо, какая-то современная интерпретация, как кофе среднего рода. Кстати, в комментариях к вашему видео как раз люди пишут, что в англиях и америках люди тюпл говорят. Яндекс-переводчик дает "тюпл", гугель - "тапл".
Спасибо)
Спасибо!
06:06 😁👍
Да и еще вопрос... Сделал информативную формочку с данными, которая генерирует поля на основании sql процедурки. Теперь клиент просит ее выводить на печать. Я начал костылить это через report viewer, но может есть более простые способы?
В сети полно библиотек для работы с печатью любых данных. Вот что точно не стал бы с нуля писать. Особенно, если нужно какому-то клиенту.
@@XpucT Спасибо. Еще покопаюсь, ибо пока нашел только отчеты. Но раз ты говоришь, значит я не верно ставлю вопрос поисковику.)
Привет, Христ! Можешь подсказать почему когда я запускаю очистку в Win 10 Tweaker у меня зависает на пункте "Очистка кэша обновление Windws". Возможно это тебе поможет , но когда я запускаю Win 10 Tweaker на Windwows SandBox и захожу в системную информацию там вылазит ошибка: System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parametr name: index
Привет 🖐
Перейди на beta:
Win 10 Tweaker ➜ О программе ➜ Перейти на beta 👍
Не ожидал, что вы ответите, а этот вариант я уже применил, спасибо вам!
теперь выскакивает ошибка {"Cannot access a disposed object.
Object name: 'Form1'."}. Но это уже другая история)
Интересная тема. Спасибо
Здравствуй Хачатур. А подскажи такую штуку. Я все еще пишу бота и возник вопрос по теме. Для сохранения настроек пользователя, пишу их в файл в потоке с некой задержкой. Можно ли в этой задаче проверять наличие основного процесса программы, для завершения фонового процесса обновления файла? Я это делал, ибо пока не придумал хорошего решения по отлову закрытия моего консольного приложения.
Привет 🖐
Я лично так и делаю с ботом. Тушу его и продолжаю работу, т.к. консоль не закрывается, всё работает дальше, как часы, как будто ничего не было.
While true.. а true у нас всегда - больше всего угараю с таких мини-замечаний. Юмор решает, когда выбираешь по чьим урокам учиться
Хачатур, скажи, пожалуйста, что думаешь про Rust (для тех, кому пожестче)
Вообще не знакомился с Rust, но слышать стал часто.
Rust - идеален для каких-то системных утилит без UI или для каких-то web сервисов. То есть специфика не совсем та. Делать на нем какое-то приложение с интерфейсом такое себе. Там есть какая-то связка с GTK, конечно. Но все это пока не очень готово для создания каких-то приложений заточенных под UI. Хороших родных библиотек пока нет вообще вроде. То есть это вообще отдельная история и с тем же C# никак не коррелирует. Ну только если в плане написания бэкенда и микросервисов. Про Rust уместно задавать вопросы тем, кто пишет на C или C++. Они, если не хотят отстать от жизни, должны уже так или иначе присматриваться к Rust’у.
@@phat80 Ну, я как бы ничего не говорил про специфику или корреляции с C#. Ну, раз на то пошло, выскажу и свое ИМХО)
Пройдет еще год-два и он будет просто идеален.
Новые GUIшные либы появляются чуть ли не каждый месяц. Большинство из них сырые. Но есть вполне сносные, например, Druid. Если нужно еще красивее, то лучший варик на данный момент - привязки к FLTK th-cam.com/video/dcI4J_bj8qc/w-d-xo.html. Конечно, до WPF пока далеко. Да и походу это что-то типа мирового тренда.. десктопных приложух пишут все меньше и меньше.. и на это место, к сожалению, приходит Electron.
Те, кто давно пишет на C/C++ чаще всего ненавидят Rust (он же "убийца"). Мне кажется, дольше всего плюсы продержатся в геймдеве.
О каком-то противостоянии C# vs Rust говорить не приходится. Понятно, что Rust'а не будет много хотя бы из-за высокого порога входа. У C# главные соперники - Python и Go. Python станет как англ. язык для всех кодеров, ибо лучшего инструмента для прототипирования не сыскать. А с Go придется мириться, как миримся с JS. Поэтому чтобы Go окончательно не захватил мир, надо продвигать .NET всеми возможными способами)) Как насчет F#, например..
@@gesriot Хайп вокруг Electron’а вроде уже давно стих. Какую-то нишу он занял, но я не могу сказать, что большую. Сейчас модно на Flutter’е (Dart) ваять приложения, хотя для десктопа и нет продакшн реди версии. Но лично мне не заходят ни electron, ни flutter.
@@phat80 Хайп-то может и стих.. но нас ждет еще одна гидра в лице React Native.
А Flutter для андроида хорош вроде.
Быстрее бы микрософт уже унифицировал свой MAUI..
Посмотрел 2 раза, но всё равно немного не понял. Токен нужен для того чтобы останавливать именно этот await, и чтобы он не оставался в памяти и не крутил ничего не делающие циклы? И ещё, потом мы засунули его в if, как булл переменную, и если у нас есть запрос на остановку то он как бы брейкает весь метод. Но если сделать такой же бул need как и в начале, и засунуть его не в while а в if (как сделали с токеном) то он будет так же работать как и токен? Ну а то что мы засунули st через запятую прямо к Task.Run я вообще не понял как работает... Объясните плз :)
Всё правильно. Ты вероятно просто ещё не делал столько вызовов сложных, где многим нужно получить токен отмены. Я поэтому и не стал городить, ибо это придёт со временем. Главное, чтобы Ты знал, когда начнёшь работать с https или чем-то ***Asynk, можно тушить всё через токены, а не просто рубить с плеча, грубо прекращая какой-то цикл.
В большинстве случаев bool достаточно, но важно отметить, что есть и система токенов на отмену операции, если определённый метод это умеет.
@@XpucT Спасибо за ответ и видео!
@@XpucT спасибо большое тебе друган
6:05 а можно ссылку на этот канал?
У меня есть new Thread.Start(), и после нажатия на кнопку, надо завершить этот поток. Метод Thread.Abort() не подходит, т.к. я не могу обратиться к нему по имени, я его создавал через new. Вопрос: как остановить поток по нажатию кнопки? Сам пока что накостылял внутри new Thread асинк функцию которая каждую секунду проверяет bool и специально ловит ошибку в try catch коде, чтобы остановить поток (дада, такой бред)
Если код работает, то это не бред.
Но лучше всё же переписать всё под чистый Task.
Привет! Слушай, а есть ли замена Thread.Abort() на новом дотнете? Начиная с версии дотнет 5 и выше, эту функцию вырезали и не предоставили ничего взамен, интернет уже весь просмотрел, всё что предлагают - проверять какой-нибудь bool на какой-то строчке кода, но это полный отстой по сравнению с предыдущим Thread.Abort(), который сам мог отменить поток на любой строчке кода вне зависимости от типа задачи.
Единственную замену, которую я нашёл - это Task.Interrupt() и потом естественно Dispose(), но проблема в том, что метод Interrupt работает только тогда, когда таск спит, либо есть делэй, то есть ты пошлёшь таску интеррапт, а он остановится только тогда, когда дойдёт до строчки Thread.Sleep() внутри таска или ей подобной строки, а ведь такой строки вовсе может и не быть, да и хотелось нормального функционала отмены потока / задачи, когда как только пошлёшь ему Thread.Abort(), он сразу же прервётся.
Привет 🖐
Давно уже с Thread, потому что сейчас все вопросы решаются Task`ом. Поверь, лучше уже сейчас всё начать переписывать, потому что потом будет тяжелее.
@@XpucT да могу и на таск всё перегнать конечно, но говорю, вот в таске только единственный вариант нашёл - Task.Interrupt(), но он сработает только тогда, когда этот таск дойдёт до строчки Thread.Sleep(), а на всех остальных команда интеррапт не понесёт эффекта.
Вот интересуюсь, может Вы знаете способ работающей принудительной остановки таска вне зависимости от выполняемой этим таском команды?
@@mikhailskylark8417 Я к тому и говорю, что даже Thread.Sleep() нужно сразу менять на await Task.Delay();
А чтобы грубо не прерывать, но при это очень хочется, то есть while (bool). И нет, это не костыль. Это нормально.
@@XpucT копец)) ну ладно, спасибо за информацию! Я уже столько костылей понаделывал, что диплом медицинского вуза уже должны были дать
@@mikhailskylark8417
Хачатур, почему в первом примере у меня ошибка System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан."
Код из видео
async void button1_Click(object sender, EventArgs e)
{
await Task.Run(async () =>
{
while (true)
{
label1.Text += "1";
await Task.Delay(1000);
}
});
}
Почему твой код выполняется, а мой нет?
т.е. у тебя выполняется а у меня нет
Привет, Юра 🖐
Это всё потому что Ты сидишь в Debug.
Подробнее об этой ошибке Хачатур рассказывал в уроке про Потоки.
vk.cc/akdhHs
@@serpotapov у меня такая же ошибка, рилиз мод решает. Но из видео(th-cam.com/video/r5Qd-EI-pjU/w-d-xo.html) я не понял причину именно зачем не работал в дебаг моде? можете обяснить?
@@puser-yh9lv7kl1h наконец то нашел ответ, Визуал студио ищет ошибку между тредами, когда включего дебаг мод, нам надо отключить эту поиск ошибок между тредами - Control.CheckForIllegalCrossThreadCalls = false;
лайк.
Это колдовство вне Хогвартса. Я такое не запомню)
Депримо! 🪄
👋👍
Слушай всегда пишу после твоих видео сам код для запоминания, и мне выдает ошибку : System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан."
Пропускаешь уроки:
th-cam.com/video/vHqHrf914TA/w-d-xo.html
потому что👍)))
Спасибо! Не обращай внимания на "умников", для нормальных людей с ними всё понятно...
а если нужно повторно запустить по клику поток ?
if (нужно повторно...)
@@XpucT ну я серьёзно сегодня целый день ковыряюсь и гугл отвечать не хочет. По одной кнопке запускаю поток по другой останавливают и потом по первой опять но тишина... он умер
Не работает
Пмшет что попытка доступа из другого потока
Ппц каждый раз проверять токен, а как не проверять и прервать задачу?
Зачем всё-таки двухуровневая архитектура? Source он как бы лишний. Можно было бы создать инстанс токена через оператор new и раздать его всем? Не поделитесь своими догадками, зачем Microsoft так сделали?
зашёл из инета послушать про отменяющий токен. В итоге больше половины видео про какие-то срачи в комунити.
Очень интересно, но нихуя не понятно