NeuroLook
رفتن به کانال در Telegram
1 669
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-37 روز
-1130 روز
آرشیو پست ها
1 669
Теперь для этих:
@worldofappleessence
@appleharvest_chronicles
@conversationsapple_talks
@atomicwebcircles_exploration
@linuxskillselevation_devops
@bittimesynccrypto_clock
@techshadesmonochrome_world
@kazakhstandigital_skyline
@theartofcodelogic_telling
@botvalley_expedition
@codecrafterslibrary_bzda
@csharpdimension_coding
@csharpsession_universals
@gamershavencard_alliance
@journeythroughgpt_worlds
@pathfindersgpt_exploration
@aichatgptdepth_expertise
@neuralgptnetwork_universe
@kodecraft_puzzles
@pentestcoder_odyssey
1 669
Исследуйте культуру Apple в @culturedappleinsight_series! Раскройте глубины мира Apple и его продуктов. Следите за нами для погружения в атмосферу Apple!
1 669
Обновите свой взгляд на технологии с @refreshtechlookapp_date! Откройте новые взгляды на мир технологий. Присоединяйтесь для обновления вашего технологического опыта!
1 669
Последние обновления технологий в @antipovtechupdates_reimagined! Изучайте перспективные технологии и инновации. Следите за нами для переосмысленных технологических обновлений!
1 669
Защитите себя от вредоносного ПО с @cybershielddefend_malware! Исследуйте методы киберзащиты и противодействия угрозам. Присоединяйтесь для обретения киберщита!
1 669
Ядро мудрости Android в @androidsageinsight_core! Получайте инсайты и практические советы по Android. Подписывайтесь для обогащения своего опыта!
1 669
Присоединяйтесь к сообществу клана в @cyberclanandroid_community! Обсуждайте кибервопросы и Android технологии. Следите за нами для обмена знаниями и опытом!
1 669
Отправляйтесь в галактику Android с @androidgalactic_development! Изучайте последние разработки и новинки. Присоединяйтесь для погружения в мир Android!
1 669
Аналитика и метрики в @insightfulmetricsit_analytics! Изучайте данные и их значимость для IT. Следите за нами для глубоких аналитических исследований!
1 669
Инновационные решения для вашего бизнеса в @blueprintsolutionai_business! Исследуйте AI и бизнес стратегии. Присоединяйтесь для фундаментальных решений!
1 669
Следите за последними технологическими новостями в @chronicleaijournaldaily_tech! Журнал о технологиях с ежедневными обновлениями. Подписывайтесь для быть в курсе событий.
1 669
🖥 Как "схлопнуть" вызовы, чтобы вызываемый код не "захлебнулся"?
▶️Итак, сценарий такой. В коде генерируются некие обновления, которые затем обрабатываются неким методом. Обновления могут генерироваться слишком часто, плюс метод обработки может тормозить, в результате обновления не успевают обрабатываться, накапливаются, обработчик потом делает лишнюю работу.
Хотелось бы как-то "накопить" обновления, пока обработчик занят. Причём, сами данные для обновления уже "накапливаются", об этом заботиться не нужно, нужно только разрулить "накопление" запросов к обработчику, чтобы когда обработчик освободиться обрабатывать не все накопившиеся запросы на обновление по отдельности, а за один раз сразу весь пакет "обновлений" обработать.
Вот так происходит сейчас:
async Task UpdateFoo()
{ ...
await SaveAsync();
}
async Task UpdateBar()
{ ...
await SaveAsync();
}
async Task UpdateBaz()
{ ...
await SaveAsync();
}
async Task SaveAsync()
{ // здесь нужно сделать так,
// чтобы одновременно обрабатывался только 1 запрос
// по окончании которого проверялось бы не было ли ещё запросов
// и если были, то обновление запускалось бы ещё 1 раз (сразу за всё "накопленное")
// и так пока есть обновления по окончании очередной обработки
}
Как это можно нормально написать? Для того, чтобы зайти один раз — понятно, SemaphoreSlim, видимо (с WaitAsync). А вот остальное как лучше сделать?
▶️Вариант решения.
⏩Общий пример, берём System.Threading.Channels.Channel<T>:
private readonly Channel<T> _channel = Channel<T>.CreateUnbounded();
⏩Пишем метод разрегребания:
private Task _workerTask;
private async Task WorkerAsync()
{
ChannelReader<T> reader = _channel.Reader;
List<T> list = new();
// ждём здесь, если в канале пусто
while (await reader.WaitToReadAsync())
{
// забираем всё что есть
// ну или можно счётчиком ограничить максимальное количество выгребаемых данных за раз
while (reader.TryRead(out T data))
{
list.Add(data);
}
// пачка собрана, погнали. это можно в try-catch завернуть, чтобы воркер не падал
await UseAsync(list);
list.Clear();
}
}
⏩Стартуем воркер:
_workerTask = WorkerAsync();Чтобы закинуть в канал:
_channel.Writer.TryWrite(x);⏩Чтобы закрыть канал (насовсем), и чтобы метод
WorkerAsync завершился, нужно вызвать:
_channel.Writer.Complete();
await _workerTask;
Вот и все дела 🙃1 669
Ozon Tech приглашает на C#-митап
29 марта | 19:00
Офлайн в Москве | Онлайн
Какие темы в программе?
#️⃣ ThreadPool, выявление проблем при работе на высоких нагрузках, Алексей Калдузов, руководитель группы разработки C#-платформы.
#️⃣ Причины медленной работы БД и способы оптимизации на примере PostgreSQL, Дмитрий Орлов, эксперт разработки, команда Metazon Inventory.
#️⃣ Решение проблем шардированных БД, Артём Барабошин, старший C#-разработчик.
А после докладов — уютный вечер за разговорами🍕
Зарегистрируйтесь, чтобы получить офлайн-билет или присоединиться к трансляции.
erid: LjN8Jtu2A
Реклама. Рекламодатель ООО «Озон Технологии».
1 669
Инновации в сельском хозяйстве с @agriculturepulse_innovation! Откройте новейшие технологии в аграрной сфере. Подписывайтесь для исследования инноваций в сельском хозяйстве!
1 669
Возглавьте команду мастеров секретов в @mastersofsecretsleader_team! Исследуйте тайны и секреты лидерства. Следите за нами для обучения секретам управления!
1 669
Добавьте технологии в жизнь в @additiontechworld! Исследуйте новейшие технологии и инновации. Присоединяйтесь для расширения своего технологического мира!
1 669
Настройтесь на гармонию с @harmonicsettingstunein_abloud! Исследуйте мир настроек и звуков. Присоединяйтесь для звукового настроя и медитации!
1 669
Этика в голосе технологий в @ethicsofitvoices! Обсуждайте этические вопросы и нормы в мире IT. Следите за нами для понимания этических аспектов технологий!
1 669
Слушайте голос этичного хакера в @ethicalhackervoice! Погрузитесь в этичное хакерство и кибербезопасность. Подписывайтесь для ценных советов и подходов в сфере хакерства!
