public static IAsyncEnumerable <DbRowGrpcModel> SubscribeAsync(this MyNoSqlGrpcReaderConnection connection, string tableName, string partitionKey) { var grpcRequest = new SubscribeGrpcRequest { ConnectionId = connection.ConnectionId, TableName = tableName, PartitionKey = partitionKey }; return(connection.MyNoSqlGrpcServerReader.SubscribeAsync(grpcRequest)); }
public IAsyncEnumerable <DbRowGrpcModel> SubscribeAsync(SubscribeGrpcRequest request, CancellationToken token = default) { var session = _sessionsList.GetSession(request.ConnectionId); var table = _dbTablesList.GetTable(request.TableName); var result = table.LockWithReadAccess(readAccess => { session.SubscribeToPartition(request.TableName, request.PartitionKey); var partition = readAccess.TryGetPartition(request.PartitionKey); if (partition == null) { return((IReadOnlyList <DbRowGrpcModel>)Array.Empty <DbRowGrpcModel>()); } return(partition.Get().ToList()); }); return(new AsyncEnumerableResult <DbRowGrpcModel>(result)); }