TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #2105 1.99K
День 1735. #ЗаметкиНаПолях
Фоновые Задачи и Как Их Использовать. Окончание
Начало

Очистка кэша с помощью фоновой задачи
Вы можете создать фоновую задачу, которая запускается через регулярные промежутки времени, например раз в час или раз в день, чтобы проверять срок действия кэшированных элементов. Каждый кэшированный элемент может иметь метку времени или значение времени жизни (TTL), связанное с ним, чтобы указать, когда его следует считать устаревшим.

Вот как будет выглядеть упрощённое управление кэшем в приложении:

var cache = new CacheManager();

// Добавляем элементы в кэш
cache.AddItem("item1", "value1",
TimeSpan.FromSeconds(30));
cache.AddItem("item2", "value2",
TimeSpan.FromMinutes(1));

// Начинаем очистку кэша
_ = Task.Run(() => cache.StartCleanup(
TimeSpan.FromSeconds(15)));

// Продолжаем работу приложения
Console.WriteLine("Приложение работает...");
Console.ReadLine();

В этом примере CacheManager управляет кэшем и имеет фоновую задачу (StartCleanup), которая периодически удаляет устаревшие элементы в зависимости от их меток TTL. Это гарантирует, что кэш будет оставаться актуальным и не будет расти бесконечно:

class CacheManager
{
private Dictionary<string, CacheItem>
cache = new();

public void AddItem(
string key,
object value,
TimeSpan expiration)
{
var item = new CacheItem(
value,
DateTime.Now.Add(expiration));
cache[key] = item;
}

public async Task StartCleanup(
TimeSpan interval)
{
while (true)
{
await Task.Delay(interval);
var now = DateTime.Now;
var toRemove = new List<string>();

foreach (var kvp in cache)
{
if (kvp.Value.Expiration < now)
toRemove.Add(kvp.Key);
}
foreach (var key in toRemove)
{
Console.WriteLine($"{key} удалён");
cache.Remove(key);
}
}
}
}

class CacheItem
{
public object Value { get; }
public DateTime Expiration { get; }

public CacheItem(object value,
DateTime expiration)
{
Value = value;
Expiration = expiration;
}
}

Вывод:
Приложение работает…
// через 30 секунд
item1 удалён
// через 1 минуту
item2 удалён

Фоновые задачи по очистке кэша помогают поддерживать производительность приложений, обеспечивая эффективность кэша и избегая использования устаревших данных.

Итого
Фоновые задачи – полезный инструмент для приложений .NET.
- Фоновые задачи предотвращают блокировку основного потока приложения длительными операциями, сохраняя отзывчивость UI и предотвращая зависание приложения.
- Выполняя ресурсоемкие задачи в фоновом режиме, приложения могут более эффективно использовать системные ресурсы, что приводит к повышению производительности и масштабируемости.
- Фоновые задачи обеспечивают параллельное выполнение задач, позволяя приложениям одновременно обрабатывать несколько операций, что важно для обработки больших рабочих нагрузок.
- Они идеально подходят для автоматизации рутинных задач, таких как очистка кэша, синхронизация данных и обслуживание баз данных, сокращая количество ручного вмешательства и обеспечивая точность данных.
- Фоновые задачи помогают эффективно управлять ресурсоёмкими операциями, такими как обработка изображений или доставка электронной почты, предотвращая истощение ресурсов.
- Они способствуют масштабируемости приложения, позволяя ему справляться с возросшей нагрузкой и требованиями без значительного снижения производительности.

Источник: https://stefandjokic.tech/posts/background-tasks-how-to-use-them
  • 👍 7
More from @netdeveloperdiary
  1. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  2. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  3. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  4. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
  5. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  6. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →