fa
Feedback
NeuroLook

NeuroLook

رفتن به کانال در Telegram

C# - обучающий канал Senior C# разработчика.

نمایش بیشتر
1 669
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-1130 روز
آرشیو پست ها
🌐 Даббл: Где интернет-культура встречается с технологиями 🚀 Погрузись в мир будущего вместе с нами! В Даббл ты найдешь: * �
🌐 Даббл: Где интернет-культура встречается с технологиями 🚀 Погрузись в мир будущего вместе с нами! В Даббл ты найдешь: * 🔥 Актуальные мемы и тренды интернета * 🤖 Обзоры инновационных гаджетов и приложений * 🧠 Новости из мира искусственного интеллекта * 🔭 Взгляд на будущее технологий Даббл - твой проводник в мир цифровых инноваций и онлайн-культуры. ➡️ @DoubleSource

🧠 Digitalium: Погружение в мир будущего #1 источник информации о передовых технологиях! С нами ты будешь в курсе: * 🚀 Проры
🧠 Digitalium: Погружение в мир будущего #1 источник информации о передовых технологиях! С нами ты будешь в курсе: * 🚀 Прорывов в области ИИ и машинного обучения * 🤖 Новейших разработок в сфере информационных технологий * 🧬 Революционных открытий в области науки и техники * 🔭 Трендов, которые формируют будущее Digitalium - твой путеводитель по миру инноваций. ➡️ @DigitaliumIT

## 🍏 Ябломания | Apple 🍏 Твой главный источник информации о мире Apple! Здесь ты найдешь: * 📰 Горячие новости: будь в курсе всех событий и анонсов компании Apple. * 🔬 Подробные обзоры:  узнай все о новых iPhone, iPad, Mac и других устройствах. * 🤫 Интересные фишки и секреты:  открой для себя скрытые возможности техники Apple. * 👥 Активное сообщество:  общайся с другими фанатами Apple и делись своим опытом. Подписывайся и погрузись в мир Apple вместе с нами! ➡️ @YablomaniyaNews #реклама

## Открой дверь в мир технологий с Технобутик! 🗝️ Технобутик - твой проводник в бескрайнюю вселенную: * 💫 Новейших технолог
## Открой дверь в мир технологий с Технобутик! 🗝️ Технобутик - твой проводник в бескрайнюю вселенную: * 💫 Новейших технологий: будь в курсе последних разработок и инноваций. * 🌐 Интернет-культуры: погрузись в мир мемов, трендов и онлайн-сообществ. * 🧠 Умных нейросетей: узнай, как искусственный интеллект меняет нашу жизнь. * 🚀 И многого другого! Подписывайся и расширяй свои горизонты вместе с нами! ➡️ @Technobutik

🚀 Хочешь прокачать свой диджитал скилл? Тогда тебе к нам! The Фичер - твой гид в мире технологий и соцсетей. Здесь ты найдеш
🚀 Хочешь прокачать свой диджитал скилл? Тогда тебе к нам! The Фичер - твой гид в мире технологий и соцсетей. Здесь ты найдешь: * 🔥 Лайфхаки для смартфона и ПК * 🤫 Скрытые фишки популярных приложений * 🧰 Инструменты для продуктивности * 🔐 Секреты кибербезопасности * 📈 Советы по продвижению в соцсетях Подписывайся и прокачивайся вместе с нами!  ➡️ @feachermedia #реклама

🖥 Факт дня — семафоры в C# Семафоры позволяют ограничить количество потоков, которые имеют доступ к определенным ресурсам. В .NET семафоры представлены классом Semaphore. Для создания семафора применяется один из конструкторов класса Semaphore: 🟡Semaphore (int initialCount, int maximumCount) параметр initialCount задает начальное количество потоков, а maximumCount — максимальное количество потоков, которые имеют доступ к общим ресурсам: initialCount — изначальное доступное количество свободных мест, maximumCount — вместимость. 🟡Semaphore (int initialCount, int maximumCount, string? name) в дополнение задает имя семафора 🟡Semaphore (int initialCount, int maximumCount, string? name, out bool createdNew): последний параметр — createdNew при значении true указывает, что новый семафор был успешно создан. Если этот параметр равен false, то семафор с указанным именем уже существует Для работы с потоками класс Semaphore имеет 2 основных метода: — WaitOne() ожидает получения свободного места в семафоре — Release() освобождает место в семафоре В отличие от lock (Monitor) и Mutex, у Semaphore нет «владельца» — он не зависит от потока. Любой поток может вызвать Release на семафоре, тогда как с Mutex и блокировкой только поток, получивший блокировку, может ее освободить.
// запускаем пять потоков
for (int i = 1; i < 6; i++)
{
    Reader reader = new Reader(i);
}
class Reader
{
    // создаем семафор
    static Semaphore sem = new Semaphore(3, 3);
    Thread myThread;
    int count = 3;// счетчик чтения
 
    public Reader(int i)
    {
        myThread = new Thread(Read);
        myThread.Name = $"Читатель {i}";
        myThread.Start();
    }
 
    public void Read()
    {
        while (count > 0)
        {
            sem.WaitOne();  // ожидаем, когда освободиться место
 
            Console.WriteLine($"{Thread.CurrentThread.Name} входит в библиотеку");
 
            Console.WriteLine($"{Thread.CurrentThread.Name} читает");
            Thread.Sleep(1000);
 
            Console.WriteLine($"{Thread.CurrentThread.Name} покидает библиотеку");
 
            sem.Release();  // освобождаем место
 
            count--;
            Thread.Sleep(1000);
        }
    }
}

🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design! 😰 Устал от запутанной инфраструктуры,
🚀 Готовься к переменам в мире IT с нашим практическим курсом по Domain Driven Design! 😰 Устал от запутанной инфраструктуры, вперемешку с бизнес логикой? Мы знаем, как это тяжело. Писать тесты становится неприятно и больно, много приходится мокать, тесты получаются огромными, хрупкими.. Но есть решение! Присоединяйся к нашему курсу, где мы разложим все по полочкам за 10 вебинаров, начиная с 13 мая. 🔝 Прими вызов и стань частью передовой волны технологического прогресса. Успей зарегистрироваться уже сейчас https://microarch.ru/courses/hexagonal-architecture?utm_source=posev&utm_medium=erid:2VtzqvmkXyj&utm_campaign=2 🎓 На нашем курсе ты изучишь: ✅ Основы Domain-Driven Design и его важность для разработчиков. ✅ Создание эффективных и масштабируемых сервисов с использованием DDD. ✅ Применение шаблонов проектирования и принципов DDD для оптимизации кода и повышения производительности. 💡 Зачем тебе этот курс? 🌟 Плюс, ты получишь: — Новые подходы к разработке, в том числе и использование подходов ядра ...

🌟 Оставайтесь на острие технологий с каналом "WatcherTechno"! 🚀 Здесь вы найдете самые интересные и оперативные новости из
🌟 Оставайтесь на острие технологий с каналом "WatcherTechno"! 🚀 Здесь вы найдете самые интересные и оперативные новости из мира высоких технологий, гаджетов и бизнеса. 👉 Подписывайтесь: @WatcherTechno

🔥 Погрузитесь в мир техно-новинок с каналом "THIL — Техно Импульс"! 🌐 От айтишного хайпа до киберпанка и всего, что связано
🔥 Погрузитесь в мир техно-новинок с каналом "THIL — Техно Импульс"! 🌐 От айтишного хайпа до киберпанка и всего, что связано с будущим технологий и виртуальной реальности — у нас есть всё. Присоединяйтесь к нам, чтобы оставаться в курсе самых свежих и захватывающих технологических трендов! ✨ Подписывайтесь и откройте для себя мир возможностей — @xTHILx

🚀 Присоединяйтесь к "IT Магистрат"! В этом канале делятся увлекательными историями из мира IT и кибербезопасности. Здесь вы
🚀 Присоединяйтесь к "IT Магистрат"! В этом канале делятся увлекательными историями из мира IT и кибербезопасности. Здесь вы найдете все самое важное о защите данных и последних технологических новинках. Не пропустите уникальную возможность быть в курсе всех IT-событий! 👉 Подписывайтесь сейчас на @ITMagistrat и станьте частью этого сообщества!

🚀 TechGPT News: Технологии и ИИ без лишних слов! 🤖 Новости, тренды, практическое применение. Будь в курсе будущего уже сего
🚀 TechGPT News: Технологии и ИИ без лишних слов! 🤖 Новости, тренды, практическое применение. Будь в курсе будущего уже сегодня. ➡️ Подписывайся: @TechGPTNews

#ПятничныйКвиз #карательныйсишарп
#ПятничныйКвиз #карательныйсишарп

🤖 Хотите быть в курсе последних новостей о технологиях и искусственном интеллекте? Тогда подписывайтесь на первый верифициро
🤖 Хотите быть в курсе последних новостей о технологиях и искусственном интеллекте? Тогда подписывайтесь на первый верифицированный Telegram-канал об ИИ - GPTMain News!  ✅ Здесь вы найдете: * ⚡️ Горячие новости из мира технологий и AI. * 🤖 Обзоры новейших разработок и продуктов. * 🧠 Инсайты от экспертов и лидеров индустрии. * 🔮 Прогнозы развития искусственного интеллекта. * 🚀 И многое другое! Будьте на шаг впереди с GPTMain News! 👉 @GPTMainNews

🌐 TechGPT News: твой гид в мире технологий и ИИ! 🚀 Хочешь быть в курсе самых свежих новостей из мира технологий, инноваций
🌐 TechGPT News: твой гид в мире технологий и ИИ! 🚀 Хочешь быть в курсе самых свежих новостей из мира технологий, инноваций и ИИ? Интересуешься, как эти разработки применяются в реальной жизни? 🤖 Тогда присоединяйся к нашему Telegram-каналу "TechGPT News"! Мы рассказываем о: * 💡  Прорывных технологиях и стартапах, меняющих мир * 🧠  Новейших разработках в области искусственного интеллекта * 🛠️  Практическом применении ИИ в различных сферах жизни * 🔭  Трендах и прогнозах развития технологического ландшафта * 🎙️  Интервью с экспертами и лидерами индустрии С нами ты: *  всегда будешь в курсе последних событий *  поймешь, как технологии влияют на твою жизнь *  найдешь вдохновение для новых идей *  расширишь свой кругозор Подписывайся на TechGPT News и окунись в захватывающий мир технологий! ➡️ Ссылка на канал: @TechGPTNews #TechGPT #Технологии #Инновации #ИИ #AI #Новости #Будущее

🖥 Zenject, внедрение зависимостей, Unity C# Очень понятное объяснение, что же такое Zenject, Dependency Injection и всё тако
+2
🖥 Zenject, внедрение зависимостей, Unity C# Очень понятное объяснение, что же такое Zenject, Dependency Injection и всё такое Рекомендую) Что внутри? • 00:36 - Другие годные источники по зенджекту • 02:20 - Что такое Dependency Injection? • 03:39 - Проблема DI — большое количество сервисов • 04:02 - Проблема DI — вложенные зависимости • 04:56 - Проблема DI — разное время жизни сервисов • 05:45 - Что делает Zenject? • 06:35 - Binding в Zenject • 07:54 - Installer-s в Zenject • 09:16 - Context в Zenject • 10:54 - Как это всё работает • 11:54 - Дополнительные инструменты Zenject-а • 13:04 - ITickable, IInitializable и IDisposable 📎 YouTube 🖥 GitHub

🚀 Хочешь быть в курсе последних трендов мира IT, технологий и нейросетей? 🧠 Тогда тебе к нам! DeepTech – твой проводник в м
🚀 Хочешь быть в курсе последних трендов мира IT, технологий и нейросетей? 🧠 Тогда тебе к нам! DeepTech – твой проводник в мир инноваций и будущего. Подписывайся на наш Telegram-канал и получай: * 🔥 Горячие новости из мира IT и технологий * 🤖 Обзоры последних достижений в области нейросетей и искусственного интеллекта * 📈 Аналитику и прогнозы развития бизнеса в условиях технологической революции * 🎙️ Интервью с экспертами и лидерами индустрии * 💡 Инсайты и полезные материалы для профессионального роста Присоединяйся к сообществу DeepTech и будь на шаг впереди! ➡️ Ссылка на канал: @DeepTechNET #DeepTech #Нейросети #Технологии #IT #Бизнес #Инновации #Будущее

🖥 Многопоточное vs асинхронное программирование ▶️Вообще, есть несколько разных понятий: • Конкурентное исполнение • Паралле
🖥 Многопоточное vs асинхронное программирование ▶️Вообще, есть несколько разных понятий: • Конкурентное исполнение • Параллельное исполнение • Многопоточное исполнение • Асинхронное исполнение Каждый из этих терминов строго определен и имеет четкое значение. 🟡Конкурентность Конкурентность — это наиболее общий термин, который говорит, что одновременно выполняется более одной задачи. 🟡Параллельное исполнение Параллельное исполнение подразумевает наличие более 1 вычислительного устройства (например, процессора), которые будут одновременно выполнять несколько задач. Параллельное исполнение — это строгое подмножество конкурентного исполнения. Это значит, что на компьютере с 1 процессором параллельное программирование - невозможно 🟡Многопоточность Многопоточность — это один из способов реализации конкурентного исполнения путем выделения абстракции "рабочего потока" (worker thread). Потоки "абстрагируют" от пользователя низкоуровневые детали и позволяют выполнять более чем одну работу "параллельно". Оп...

🖥 Ссылочные локальные переменные в C# 🟡Начиная с версии C# 7 в языке появилась возможность, позволяющая объявить локальную
🖥 Ссылочные локальные переменные в C# 🟡Начиная с версии C# 7 в языке появилась возможность, позволяющая объявить локальную переменную, ссылающуюся на элемент массива или на поле в объекте:
int[] simpleArray = {0, 1, 2, 3, 4, 5, 6, 7, 8};
ref int simpleElementRef = ref simpleArray[3];
В этом примере simpleElementRef — ссылка на simpleArray[3]. Изменение simpleElementRef приводит к изменению элемента массива:
simpleElementRef *= 15;
Console.WriteLine(simpleElementRef);      // 15
Console.WriteLine(simpleArray[3]);        // 15
🟡В качестве цели ссылочной локальной переменной может быть указан элемент массива, поле, или обычная локальная переменная. Целью не может быть свойство. Ссылочные локальные переменные используются для специальных сценариев микро-оптимизации и как правило применяются в сочетании с возвращаемыми ссылочными значениями. 🟡Также ссылочные локальные переменные можно возвращать из методов. В результате получаем возвращаемое ссылочное значение:
static string X = "Старое значение";
static ref
...

🖥 Факт дня — Task.Yield() Повторение — мать учения и основа научного метода, так что приступим) Task.Yield() возвращает специальное значение, предназначенное для передачи оператору await, и в отрыве от этого оператора не имеющее смысла. Конструкция же await Task.Yield() делает довольно простую вещь — прерывает текущий метод и сразу же планирует его продолжение в текущем контексте синхронизации. Используется же эта конструкция для разных целей. 🟡Во-первых, эта конструкция может быть использована для немедленного возврата управления вызывающему коду. Например, при вызове из обработчика события событие будет считаться обработанным:
protected override async void OnClosing(CancelEventArgs e)
{
    e.Cancel = true;
    await Task.Yield(); 
    // (какая-то логика)
}
🟡Во-вторых, эта конструкция используется для очистки синхронного контекста вызова. Например, так можно "закрыть" текущую транзакцию (ambient transaction):
using (var ts = new TransactionScope()) {
  // ...
  Foo();
  // ...
  ts.Complete();
}

async void Foo() {
  // ... тут мы находимся в контексте транзакции
  if (Transaction.Current != null) await Task.Yield();
  // ... а тут его уже нет!
}
🟡В-третьих, эта конструкция может очистить стек вызовов. Это может быть полезным, если программа падает с переполнением стека при обработке кучи вложенных продолжений. Например, рассмотрим упрощенную реализацию AsyncLock:
class AsyncLock
{
    private Task unlockedTask = Task.CompletedTask;

    public async Task<Action> Lock()
    {
        var tcs = new TaskCompletionSource<object>();

        await Interlocked.Exchange(ref unlockedTask, tcs.Task);

        return () => tcs.SetResult(null);
    }
}
Здесь поступающие запросы на получение блокировки выстраиваются в неявную очередь на продолжениях. Казалось бы, что может пойти не так?
private static async Task Foo()
{
    var _lock = new AsyncLock();
    var unlock = await _lock.Lock();

    for (var i = 0; i < 100000; i++) Bar(_lock);

    unlock();
}

private static async void Bar(AsyncLock _lock)
{
    var unlock = await _lock.Lock();
    // do something sync
    unlock();
}
Здесь продолжение метода Bar вызывается в тот момент, когда другой метод Bar выполняет вызов unlock(). Получается косвенная рекурсия между методом Bar и делегатом unlock, которая быстро сжирает стек и ведет к его переполнению. Добавление же вызова Task.Yield() перенесет исполнение в "чистый" фрейм стека, и ошибка исчезнет:
class AsyncLock
{
    private Task unlockedTask = Task.CompletedTask;

    public async Task<Action> Lock()
    {
        var tcs = new TaskCompletionSource<object>();

        var prevTask = Interlocked.Exchange(ref unlockedTask, tcs.Task);

        if (!prevTask.IsCompleted) 
        {
          await prevTask;
          await Task.Yield();
        }

        return () => tcs.SetResult(null);
    }
}

#ПятничныйКвиз #карательныйсишарп
#ПятничныйКвиз #карательныйсишарп