public override void Dispose(ref List <Exception> disposeErrors) { // Cancel token try { cancelSrc.Cancel(); } catch (Exception e) { (disposeErrors ?? (disposeErrors = new List <Exception>())).Add(e); } // Dispose zipArchive try { // Dispose and null zip archive, only once. Interlocked.CompareExchange(ref archive, null, archive)?.Dispose(); } catch (Exception e) { (disposeErrors ?? (disposeErrors = new List <Exception>())).Add(e); } // Dispose semaphore try { Interlocked.CompareExchange(ref m_lock, null, m_lock)?.Dispose(); } catch (Exception e) { (disposeErrors ?? (disposeErrors = new List <Exception>())).Add(e); } belateSource = null; }
public override void Dispose(ref List <Exception> disposeErrors) { archiveOpener = null; belateSource = null; }
public ArchiveOpenerStreamProvider(Func <IArchive> archiveOpener, IBelatedDisposeList belateSource) { this.archiveOpener = archiveOpener ?? throw new ArgumentNullException(nameof(archiveOpener)); this.belateSource = belateSource; }
public ArchiveStreamProvider(IArchive archive, IBelatedDisposeList belateSource) { this.archive = archive; this.belateSource = belateSource; }
/// <summary> /// Create opener. /// </summary> /// <param name="archiveOpener"></param> /// <param name="entryName"></param> /// <param name="belateSource"></param> public StreamOpener(Func <Stream> archiveOpener, string entryName, IBelatedDisposeList belateSource) { this.streamOpener = archiveOpener ?? throw new ArgumentNullException(nameof(archiveOpener)); this.entryName = entryName ?? throw new ArgumentNullException(nameof(entryName)); this.belateSource = belateSource; }