/// <summary> /// Called when handler entry expired. Removes from active list /// and adds weak reference to expiry queue. When garbage collected /// expired handlers are cleaned up. /// </summary> /// <param name="active"></param> private void OnHandlerExpired(ActiveHandlerEntry active) { var removed = _activeHandlers.TryRemove(active.Name, out var found); _expiredHandlers.Enqueue(new ExpiredHandlerEntry(active)); StartCleanupTimer(); }
/// <summary> /// Called when handler entry expired. Removes from active list /// and adds weak reference to expiry queue. When garbage collected /// expired handlers are cleaned up. /// </summary> /// <param name="active"></param> private void OnHandlerExpired(ActiveHandlerEntry active) { #pragma warning disable IDE0067 // Dispose objects before losing scope _activeHandlers.TryRemove(active.Name, out _); _expiredHandlers.Enqueue(new ExpiredHandlerEntry(active)); #pragma warning restore IDE0067 // Dispose objects before losing scope StartCleanupTimer(); }
/// <inheritdoc/> public System.Net.Http.HttpClient CreateClient(string resourceId) { if (resourceId == null) { throw new ArgumentNullException(nameof(resourceId)); } // Get handler entry for client var entry = _activeHandlers.GetOrAdd(resourceId, key => ActiveHandlerEntry.Create(_factory, key, OnHandlerExpired)); return(new System.Net.Http.HttpClient(entry, false)); }
/// <summary> /// Create entry /// </summary> /// <param name="other"></param> public ExpiredHandlerEntry(ActiveHandlerEntry other) { Name = other.Name; _livenessTracker = new WeakReference(other); _innerHandler = other.InnerHandler; }