TeamCity.CSharpInteractive/StreamReader.cs (30 lines of code) (raw):
namespace TeamCity.CSharpInteractive;
internal class StreamReader : IStreamReader
{
private readonly object _lockObject = new();
private readonly Stream _stream;
public StreamReader(Stream stream) => _stream = stream;
public int Read(Memory<byte> buffer)
{
lock (_lockObject)
{
return _stream.Read(buffer.Span);
}
}
public int Read(Memory<byte> buffer, long offset)
{
lock (_lockObject)
{
_stream.Seek(offset, SeekOrigin.Begin);
return _stream.Read(buffer.Span);
}
}
public void Dispose()
{
lock (_lockObject)
{
_stream.Dispose();
}
GC.SuppressFinalize(this);
}
}