frostfs-sdk-csharp/src/FrostFS.SDK.ClientV2/Tools/RangeReader.cs
Pavel Gross 003b7fdfdd
All checks were successful
DCO / DCO (pull_request) Successful in 47s
[#25] Client: Implement Patch and Range methods
Signed-off-by: Pavel Gross <p.gross@yadro.com>
2024-11-08 10:38:50 +03:00

38 lines
915 B
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using FrostFS.Object;
using Grpc.Core;
namespace FrostFS.SDK.ClientV2;
public sealed class RangeReader(AsyncServerStreamingCall<GetRangeResponse> call) : IObjectReader
{
private bool disposed;
public AsyncServerStreamingCall<GetRangeResponse> Call { get; private set; } = call;
public async ValueTask<ReadOnlyMemory<byte>?> ReadChunk(CancellationToken cancellationToken = default)
{
if (!await Call.ResponseStream.MoveNext(cancellationToken).ConfigureAwait(false))
return null;
var response = Call.ResponseStream.Current;
Verifier.CheckResponse(response);
return response.Body.Chunk.Memory;
}
public void Dispose()
{
if (!disposed)
{
Call?.Dispose();
GC.SuppressFinalize(this);
disposed = true;
}
}
}