potentially fixes an issue with cache creation, do not remove mediator on failure

This commit is contained in:
rootdarkarchon
2023-02-28 22:45:00 +01:00
parent a37281b719
commit ebe9ea47be
10 changed files with 45 additions and 59 deletions

View File

@@ -22,6 +22,7 @@ public class MareMediator : IDisposable
private readonly ILogger<MareMediator> _logger;
private readonly PerformanceCollector _performanceCollector;
private readonly object _addRemoveLock = new();
private readonly Dictionary<object, DateTime> _lastErrorTime = new();
public MareMediator(ILogger<MareMediator> logger, PerformanceCollector performanceCollector)
{
@@ -69,11 +70,13 @@ public class MareMediator : IDisposable
}
catch (Exception ex)
{
lock (_addRemoveLock)
if (_lastErrorTime.TryGetValue(subscriber, out var lastErrorTime))
{
var removed = _subscriberDict[message.GetType()].RemoveWhere(s => s == subscriber);
_logger.LogCritical(ex, "Error executing {type} for subscriber {subscriber}, removed from Mediator: {removeCount}", message.GetType().Name, subscriber.Subscriber.GetType().Name, removed);
if (lastErrorTime.Add(TimeSpan.FromSeconds(10)) > DateTime.UtcNow) continue;
}
_logger.LogCritical(ex, "Error executing {type} for subscriber {subscriber}", message.GetType().Name, subscriber.Subscriber.GetType().Name);
_lastErrorTime[subscriber] = DateTime.UtcNow;
}
}
});