/
vshmidt
/
masstransit
Обзор
Документация
Войти
/
vshmidt
/
masstransit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
src/MassTransit/Middleware/Outbox/InMemoryOutboxMessageRepository.cs
46 строк
1 KB
Chris Patterson
Massive file cleanup
27 мар 2024, 02:43
27 мар 2024, 02:43
2ac69e8
Код
Авторство
О чём код?
namespace MassTransit.Middleware.Outbox { using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Internals; public class InMemoryOutboxMessageRepository { readonly Dictionary<InMemoryInboxMessageKey, InMemoryInboxMessage> _dictionary; readonly SemaphoreSlim _inUse = new SemaphoreSlim(1); public InMemoryOutboxMessageRepository() { _dictionary = new Dictionary<InMemoryInboxMessageKey, InMemoryInboxMessage>(InMemoryInboxMessageKey.Comparer); } public Task MarkInUse(CancellationToken cancellationToken) { return _inUse.WaitAsync(cancellationToken); } public async Task<InMemoryInboxMessage> Lock(Guid messageId, Guid consumerId, CancellationToken cancellationToken) { var key = new InMemoryInboxMessageKey(messageId, consumerId); var existing = _dictionary.GetOrAdd(key, _ => new InMemoryInboxMessage(messageId, consumerId) { Received = DateTime.UtcNow, ReceiveCount = 0 }); await existing.MarkInUse(cancellationToken).ConfigureAwait(false); return existing; } public void Release() { _inUse.Release(); } } }