mirror of
https://github.com/adamhathcock/sharpcompress.git
synced 2026-02-03 21:23:38 +00:00
[PR #1133] [MERGED] Add async I/O support for SevenZip archive initialization #1563
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/adamhathcock/sharpcompress/pull/1133
Author: @Copilot
Created: 1/15/2026
Status: ✅ Merged
Merged: 1/16/2026
Merged by: @adamhathcock
Base:
adam/async-creation← Head:copilot/sub-pr-1132📝 Commits (5)
0b2158fInitial planbbba2e6Initial plan for fixing SevenZipArchive_LZMA_AsyncStreamExtraction test9bb670aFix SevenZipArchive async stream handling by adding async Open and ReadDatabase methods491beabuncomment testsf4ce4cbfix tests for both frameworks📊 Changes
5 files changed (+306 additions, -14 deletions)
View changed files
📝
src/SharpCompress/Archives/SevenZip/SevenZipArchive.cs(+73 -4)📝
src/SharpCompress/Common/SevenZip/ArchiveReader.cs(+146 -0)📝
src/SharpCompress/Factories/ArjFactory.cs(+1 -2)📝
src/SharpCompress/packages.lock.json(+3 -3)📝
tests/SharpCompress.Test/SevenZip/SevenZipArchiveAsyncTests.cs(+83 -5)📄 Description
SevenZipArchive was performing synchronous reads during archive initialization, causing failures when used with async-only streams via
OpenAsyncArchive.Changes:
OpenAsyncandReadDatabaseAsyncmethods that useReadExactAsyncinstead of synchronousReadcallsLoadFactoryAsyncto initialize archive database asynchronouslyLoadEntriesAsyncto use async loading pathLoadEntriesto iterator pattern (yield return) for proper lazy evaluationThe async and sync code paths are now properly separated, with
EntriesAsyncusing fully async I/O operations:✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.