<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

LongTextTapiBridgePool

using Relativity.Logging; using System; using System.Collections.Generic; using System.Threading; namespace Relativity.DataExchange.Export.VolumeManagerV2.Download.TapiHelpers { public class LongTextTapiBridgePool : ILongTextTapiBridgePool, IDisposable { private readonly object _syncRoot = new object(); private readonly List<IDownloadTapiBridge> _longTextTapiBridges; private readonly ILongTextDownloadTapiBridgeFactory _factory; private readonly ILog _logger; public int Count { get { lock (_syncRoot) { return _longTextTapiBridges.Count; } } } public LongTextTapiBridgePool(ILongTextDownloadTapiBridgeFactory factory, ILog logger) { _factory = factory; _logger = logger; _longTextTapiBridges = new List<IDownloadTapiBridge>(); } public IDownloadTapiBridge Request(CancellationToken token) { IDownloadTapiBridge downloadTapiBridge = _factory.Create(token); lock (_syncRoot) { _longTextTapiBridges.Add(downloadTapiBridge); return downloadTapiBridge; } } public void Release(IDownloadTapiBridge bridge) { lock (_syncRoot) { _longTextTapiBridges.Remove(bridge); } TryDisposeTapiBridge(bridge); } public void Dispose() { foreach (IDownloadTapiBridge longTextTapiBridge in _longTextTapiBridges) { TryDisposeTapiBridge(longTextTapiBridge); } } private void TryDisposeTapiBridge(IDownloadTapiBridge bridge) { try { bridge?.Dispose(); } catch (Exception ex) { _logger.LogError(ex, "Failed to dispose Tapi Bridge.", Array.Empty<object>()); } } } }