Не все аспекты программирования идут на пользу при реальной работе. Часто избыточные знания только мешают трезво оценить и написать фичу.
Вот что думает наш админ:
Когда я начинал, мне рассказали, что многозадачность — это ключ к быстродействующим приложениям, и я потратил кучу времени, изучая все тонкости асинхронности. В итоге понял, что в реальных проектах асинхронность скорее игрушка, чем нужный инструмент.
💬 Есть ли у вас знания, которые так и не пригодились в работе? Делитесь в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤔5🌚5🥱3😢1
Иногда нам нужно на примере узнать как отработает LINQ запрос, к примеру.
Можно пойти старым путём и создать отдельный файл в проекте с названием «Test123», но Rider предлагает иной вариант.
Если Rider у вас настроен под хоткеи от Intellij, то достаточно одновременно нажать:
Ctrl + Alt + Shift + Insert
И IDE создаст вам временный файл, который не будет добавлен в контекст проекта.
Просто, быстро и без боли.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤔5❤2🔥2
📁 Файл с инструкциями вместо тысячи запросов
Представьте: один файлик — и все последующие автодополнения подстраиваются под ваш корпоративный стандарт.
В блоге .NET показали, как создать такой файл и навсегда забыть о рутине при работе с GitHub Copilot.
Создаёте в корне репозитория папку
В шапке указываете, к каким файлам применить правила, а дальше описываете свои стандарты
➡️ Dev блог Microsoft
🐸 Библиотека шарписта #буст
Представьте: один файлик — и все последующие автодополнения подстраиваются под ваш корпоративный стандарт.
В блоге .NET показали, как создать такой файл и навсегда забыть о рутине при работе с GitHub Copilot.
Создаёте в корне репозитория папку
.github/
и внутри неё — copilot-instructions.md
.В шапке указываете, к каким файлам применить правила, а дальше описываете свои стандарты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🌚3❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁54💯12
Отвлечёмся от работы, но не совсем. Сегодня будем отгадывать термины из разработки.
1. Специальный оператор, возвращающий имя переменной, метода или типа как строку.
2. Модификатор метода, обозначающий его асинхронное выполнение в сочетании с await.
3. Специальный член класса, позволяющий обращаться к экземпляру как к массиву: obj[i].
4. Модификатор, позволяющий объявить один класс/метод/структуру в нескольких файлах.
5. Ключевое слово, позволяющее из метода-итератора возвращать значения по одному.
6. Модификатор поля, гарантирующий свежесть данных при многопоточном доступе.
7. Контекст или модификатор, разрешающий небезопасный (низкоуровневый) код с указателями.
Пишите под спойлер свои варианты в комментариях 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👾2🌚1
То, что вы могли пропустить в потоке будней.
— Июльские обновления .NET
Вышли новые сервисные релизы .NET 8.0.18 и 9.0.7 с исправлениями багов и улучшениями для рантайма и ASP.NET.
— Куда движется Critter Stack
Запуск коммерческой консоли мониторинга Critter Watch для управления Wolverine и Marten, новые рецепты по работе с конкуренцией и параллелизмом, расширение декларативного доступа к данным и ряд небольших, но важных улучшений в экосистеме.
— Роадмапы AutoMapper и MediatR
AutoMapper нацеливается на внедрение source-генераторов для раннего обнаружения ошибок маппинга и улучшенной отладки, сохраняя при этом поддержку IQueryable и расширяемости.
MediatR планирует ослабить привязку к DI-контейнеру ASP .NET Core, добавить новые «behaviors» для расширения поведения, встроенную поддержку паттерна Result и расширить сценарии использования
— Как поднять резюме в топ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
☝️ Последний шанс купить курсы Proglib Academy с доступом навсегда!
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
Это не просто летняя распродажа, это финал эпохи. Мы дарим скидку 40% на все курсы, включая полностью обновлённый курс по Python (предложение НЕ ДЕЙСТВУЕТ только на курс по AI-агентам для DS-специалистов).
Но главное: с 1 августа доступ ко всем новым курсам станет ограниченным. Успейте инвестировать в свои знания на самых выгодных условиях!
👉 Выбрать курс
C#/.NET-разработчик — удалёнка.
C# and MS SQL Developer — до 4 000 $, удалёнка.
.Net Core Разработчик Junior — от 3 000, удалёнка.
Backend-разработчик C# — удалёнка.
C# разработчик — до 420 000 ₽, удалёнка.
Бустер — Удалённо (в любом городе мира).
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Параллельная асинхронная обработка
В высоконагруженных приложениях часто требуется запустить несколько независимых операций параллельно и дождаться их завершения полностью или частично.
🛠 Дождаться всех задач —
Когда нужно запустить сразу несколько независимых операций и обработать результаты только после того, как все они завершатся.
1. Запускаем задачи параллельно:
2. Ждём завершения всех
3. Получаем результаты
Для задач с возвращаемым значением WhenAll вернёт массив результатов в том же порядке.
Если нужно ограничить количество одновременных операций — обёрните запуск через
Передавайте
Когда важно получить результат как можно скорее и дальше обработать только первый ответ.
1. Запускаем конкурирующие задачи
2. Ждём первую завершившуюся
3. Получаем и обрабатываем результат
Передавайте единый CancellationToken через CancellationTokenSource, чтобы отменять все задачи разом.
Назначайте разумный таймаут через
Для большого числа конкурирующих операций рассматривайте использование
🐸 Библиотека шарписта #буст
В высоконагруженных приложениях часто требуется запустить несколько независимых операций параллельно и дождаться их завершения полностью или частично.
🛠 Дождаться всех задач —
Task.WhenAll
Когда нужно запустить сразу несколько независимых операций и обработать результаты только после того, как все они завершатся.
1. Запускаем задачи параллельно:
var loadUsers = LoadUsersAsync(); // загрузка списка пользователей
var loadOrders = LoadOrdersAsync(); // загрузка списка заказов
var loadCatalog = LoadCatalogAsync(); // загрузка каталога товаров
2. Ждём завершения всех
await Task.WhenAll(loadUsers, loadOrders, loadCatalog);
3. Получаем результаты
var users = await loadUsers; // List<User>
var orders = await loadOrders; // List<Order>
var catalog = await loadCatalog; // List<Product>
Console.WriteLine($"Пользователей: {users.Count}, заказов: {orders.Count}, позиций: {catalog.Count}");
Для задач с возвращаемым значением WhenAll вернёт массив результатов в том же порядке.
Если нужно ограничить количество одновременных операций — обёрните запуск через
SemaphoreSlim
.Передавайте
CancellationToken
во все методы, чтобы можно было прервать все сразу.🛠
Дождаться первой завершившейся задачи — Task.WhenAny
Когда важно получить результат как можно скорее и дальше обработать только первый ответ.
1. Запускаем конкурирующие задачи
var t1 = GetFromCacheAsync(userId, ct);
var t2 = GetFromDatabaseAsync(userId, ct);
var t3 = GetFromApiAsync(userId, ct);
2. Ждём первую завершившуюся
Task<Task<User?>> first = Task.WhenAny(t1, t2, t3);
Task<User?> winner = await first;
3. Получаем и обрабатываем результат
User? user = await winner;
if (user != null)
Console.WriteLine($"Данные получены от {GetSourceName(winner)}");
else
Console.WriteLine("Пустой ответ от первого источника");
Передавайте единый CancellationToken через CancellationTokenSource, чтобы отменять все задачи разом.
Назначайте разумный таймаут через
Task.WhenAny
с Task.Delay
, чтобы не ждать вечно:var timeoutTask = Task.Delay(TimeSpan.FromSeconds(5), ct);
var winner = await Task.WhenAny(t1, t2, t3, timeoutTask);
if (winner == timeoutTask) throw new TimeoutException();
Для большого числа конкурирующих операций рассматривайте использование
Channel
или Dataflow
вместо запуска сотен Task
.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17😁2❤1👾1
В условиях высокой конкуренции важно не только иметь качественное резюме, но и знать, как сделать его заметным для рекрутеров.
Существуют простые, но эффективные способы, которые помогут вам выделиться среди множества кандидатов и привлечь внимание работодателей.
В карточках делимся проверенными методами, а в статье раскрываем всю суть.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁39❤1
AsyncEx — библиотека, которая облегчает работу с асинхронными операциями, предоставляя готовые решения для синхронизации, ожидания и контроля выполнения задач.
Что есть под капотом
• AsyncLock — это асинхронный мьютекс, который позволяет синхронизировать доступ к ресурсу без блокировки потока.
В отличие от стандартных синхронных мьютексов, AsyncLock работает асинхронно, что предотвращает блокировку потоков в многозадачных приложениях.
• AsyncSemaphore — это асинхронная версия семафора, которая ограничивает количество одновременно выполняющихся задач.
• AsyncLazy — это асинхронная версия
Lazy<T>
. Она позволяет отложить выполнение ресурсоёмких операций до тех пор, пока они действительно не потребуются, при этом поддерживает асинхронный контекст.• AsyncConditionVariable— это механизм синхронизации, позволяющий ожидать и уведомлять асинхронные задачи о состоянии ресурса.
• AsyncEvent — это асинхронная версия событий в C#, которая позволяет обрабатывать подписчиков и уведомления асинхронно.
• TaskHelper — утилита для работы с задачами, которая упрощает код для ожидания и обработки результатов асинхронных операций.
Как начать использовать
1. Просто установите библиотеку через NuGet:
Install-Package Nito.AsyncEx
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤3🔥2😁2
Бу, испугались? А мы да. Нашли видео, в котором запускается Python из C# кода, а в коде на Python запускаются либы, написанные на Си.
Звучит пугающе и выглядит не менее устрашающе.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁17🌚5👍2
💡 ИИ в обучении: возможности и ловушки
Сегодня технологии позволяют нам учиться с помощью нейронных сетей, но как не превратить процесс в бессмысленный «вайбкодинг» с GPT и действительно прокачать навыки.
Один из наших подписчиков недавно спросил:
Самый главный совет в такой ситуации — это тренировать выдержку. Если вы можете держать себя в руках, то у вас два пути:
1. Вместо нейросети пользоваться документацией.
Когда вам нужно что-то реализовать сначала подумайте что вам нужно. Декомпозируйте проект на модули а модули на функции.
После декомпозиции можно погуглить как это реализовать. Например, вы хотите принимать данные по REST, значит вам нужна точка входа в сервис.
Гуглите как это сделать. Буквально: «Как передать данные по REST в приложение на .NET». Бегло смотрите по выдаче и находите названия библиотек или инструментов, небольшие куски реализации и ищите по ним документацию.
Первое время это может быть тяжело, особенно после вайбкоддинга.
2. Просить у нейросети пояснение, а не решение.
Прежде чем начать работу с нейросетью можно подготовить промпт. Если вы не хотите видеть реализацию, то так и напишите: «Мне не нужна реализация или готовые куски кода, я хочу увидеть тезисы, которые натолкнут меня на решение. Подсказывай мне библиотеки или паттерны».
💬 Как вы поддерживаете баланс между помощью нейронки и самостоятельным погружением? Поделитесь опытом в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
🐸 Библиотека шарписта #междусобойчик
Сегодня технологии позволяют нам учиться с помощью нейронных сетей, но как не превратить процесс в бессмысленный «вайбкодинг» с GPT и действительно прокачать навыки.
Один из наших подписчиков недавно спросил:
Как вообще можно учиться у нейронки, если обучение превращается в вайбкодинг? Вопрос больше про процесс обучения, нежели про конкретную задачу.
Самый главный совет в такой ситуации — это тренировать выдержку. Если вы можете держать себя в руках, то у вас два пути:
1. Вместо нейросети пользоваться документацией.
Когда вам нужно что-то реализовать сначала подумайте что вам нужно. Декомпозируйте проект на модули а модули на функции.
После декомпозиции можно погуглить как это реализовать. Например, вы хотите принимать данные по REST, значит вам нужна точка входа в сервис.
Гуглите как это сделать. Буквально: «Как передать данные по REST в приложение на .NET». Бегло смотрите по выдаче и находите названия библиотек или инструментов, небольшие куски реализации и ищите по ним документацию.
Первое время это может быть тяжело, особенно после вайбкоддинга.
2. Просить у нейросети пояснение, а не решение.
Прежде чем начать работу с нейросетью можно подготовить промпт. Если вы не хотите видеть реализацию, то так и напишите: «Мне не нужна реализация или готовые куски кода, я хочу увидеть тезисы, которые натолкнут меня на решение. Подсказывай мне библиотеки или паттерны».
💬 Как вы поддерживаете баланс между помощью нейронки и самостоятельным погружением? Поделитесь опытом в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7