diff --git a/Src/CSharpier/FileReader.cs b/Src/CSharpier/FileReader.cs index b185b6ba4..2da9260ce 100644 --- a/Src/CSharpier/FileReader.cs +++ b/Src/CSharpier/FileReader.cs @@ -9,39 +9,50 @@ namespace CSharpier { public static class FileReader { + private static readonly SemaphoreSlim Semaphore = new(10); + static FileReader() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); } -#pragma warning disable 1998 public static async Task ReadFile( -#pragma warning restore 1998 string filePath, IFileSystem fileSystem, CancellationToken cancellationToken ) { var defaultedEncoding = false; - using var fileStream = fileSystem.File.OpenRead(filePath); - var detectionResult = CharsetDetector.DetectFromStream(fileStream); - var encoding = detectionResult?.Detected?.Encoding; - if (encoding == null) + await Semaphore.WaitAsync(cancellationToken); + try { - defaultedEncoding = true; - encoding = Encoding.Default; - } + await using var fileStream = fileSystem.File.OpenRead(filePath); + var detectionResult = CharsetDetector.DetectFromStream(fileStream); + var encoding = detectionResult?.Detected?.Encoding; + if (encoding == null) + { + defaultedEncoding = true; + encoding = Encoding.Default; + } + + fileStream.Seek(0, SeekOrigin.Begin); - fileStream.Seek(0, SeekOrigin.Begin); + // this fixes an issue with ANSI encoded files like csharpier-repos\AutoMapper\src\UnitTests\Internationalization.cs + var encodingToRead = encoding.CodePage == 852 + ? Encoding.GetEncoding(1252) + : encoding; - // this fixes an issue with ANSI encoded files like csharpier-repos\AutoMapper\src\UnitTests\Internationalization.cs - var encodingToRead = encoding.CodePage == 852 ? Encoding.GetEncoding(1252) : encoding; + using var streamReader = new StreamReader(fileStream, encodingToRead); - using var streamReader = new StreamReader(fileStream, encodingToRead); + var fileContents = await streamReader.ReadToEndAsync(); - var fileContents = streamReader.ReadToEnd(); + return new FileReaderResult(encoding, fileContents, defaultedEncoding); + } - return new FileReaderResult(encoding, fileContents, defaultedEncoding); + finally + { + Semaphore.Release(); + } } }