Как реализовать «single-flight» асинхронный кэш в C#, чтобы при наплыве запросов по одному ключу выполнялась ровно одна загрузка?
Держите ConcurrentDictionary<TKey, Lazy<Task<T>>>: через GetOrAdd публикуйте один общий Lazy<Task<T>> на ключ (режим ExecutionAndPublication) и await его. При отмене/ошибке — удаляйте запись, чтобы следующая попытка перезапустила загрузку. Добавьте TTL/лимиты (например, IMemoryCache), фоновые обновления, per-request CancellationToken, не кэшируйте исключения и следите за размерами/метриками промахов. Альтернатива — пер-ключевой SemaphoreSlim/lock для объединения запросов.
Как реализовать «single-flight» асинхронный кэш в C#, чтобы при наплыве запросов по одному ключу выполнялась ровно одна загрузка?
Держите ConcurrentDictionary<TKey, Lazy<Task<T>>>: через GetOrAdd публикуйте один общий Lazy<Task<T>> на ключ (режим ExecutionAndPublication) и await его. При отмене/ошибке — удаляйте запись, чтобы следующая попытка перезапустила загрузку. Добавьте TTL/лимиты (например, IMemoryCache), фоновые обновления, per-request CancellationToken, не кэшируйте исключения и следите за размерами/метриками промахов. Альтернатива — пер-ключевой SemaphoreSlim/lock для объединения запросов.
How to Create a Private or Public Channel on Telegram? Today, we will address Telegram channels and how to use them for maximum benefit. In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. Add up to 50 administrators Content is editable within two days of publishing
from us