LogRecordSequence.ReserveAndAppend 方法

定义

自动生成一个预留,并向序列中追加一条记录。

重载

ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

自动生成一个预留,并向序列中追加一条记录。 无法继承此方法。

ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

自动生成一个预留,并向序列中追加一条记录。 无法继承此方法。

ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

自动生成一个预留,并向序列中追加一条记录。 无法继承此方法。

C#
public System.IO.Log.SequenceNumber ReserveAndAppend (System.Collections.Generic.IList<ArraySegment<byte>> data, System.IO.Log.SequenceNumber userRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservationCollection, params long[] reservations);

参数

data
IList<ArraySegment<Byte>>

将连接在一起并以记录形式追加的字节数组段的列表。

userRecord
SequenceNumber

用户指定顺序中下一条记录的序列号。

previousRecord
SequenceNumber

“上一个”顺序中下一条记录的序列号。

recordAppendOptions
RecordAppendOptions

RecordAppendOptions 的一个有效值,用于指定应如何写入数据。

reservationCollection
ReservationCollection

要在其中生成预留的预留集合。

reservations
Int64[]

要生成的预留(以字节为单位)。

返回

追加的日志记录的序列号。

实现

例外

一个或多个自变量无效。

追加记录时,发生了 I/O 错误。

记录序列无法获得足够的可用空间来容纳新记录或生成预留。

该方法是在序列已释放之后调用的。

一个或多个参数为 null

userRecordpreviousRecord 不在此序列的基序列号和最新序列号之间。

由于记录序列是通过只读访问权限打开的,因此无法执行该操作。

没有足够的内存来继续执行该程序。

操作系统拒绝了对指定的日志序列的访问。

data 中找不到足以容纳 reservations 的预留。

注解

包含在 data 参数中的数据将连接成单个字节数组,以便以记录形式追加。 但在读取记录时,无法将数据重新拆分为数组段。

在原子操作中,使用记录追加操作将指定的预留添加到所提供的预留集合。 如果追加失败,将不保留任何空间。

通常,此方法可以在写入记录之前完成。 若要确保记录已写入,请使用 ForceFlush 参数指定 recordAppendOptions 标志,或者调用 Flush 方法。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])

自动生成一个预留,并向序列中追加一条记录。 无法继承此方法。

C#
public System.IO.Log.SequenceNumber ReserveAndAppend (ArraySegment<byte> data, System.IO.Log.SequenceNumber nextUndoRecord, System.IO.Log.SequenceNumber previousRecord, System.IO.Log.RecordAppendOptions recordAppendOptions, System.IO.Log.ReservationCollection reservationCollection, params long[] reservations);

参数

data
ArraySegment<Byte>

将连接在一起并以记录形式追加的字节数组段的列表。

nextUndoRecord
SequenceNumber

用户指定顺序中下一条记录的序列号。

previousRecord
SequenceNumber

“上一个”顺序中下一条记录的序列号。

recordAppendOptions
RecordAppendOptions

RecordAppendOptions 的一个有效值,用于指定应如何写入数据。

reservationCollection
ReservationCollection

一个 ReservationCollection,它包含要在其中生成预留的集合。

reservations
Int64[]

要生成的预留(以字节为单位)。

返回

追加的日志记录的序列号。

实现

例外

nextUndoRecordpreviousRecord 对此序列无效。

- 或 -

无法追加 data,原因是它比最大记录大小要大。

- 或 -

reservations 不是由此记录序列创建的。

一个或多个参数为 null

nextUndoRecordpreviousRecord 不在此序列的基序列号和最新序列号之间。

由于出现意外的 I/O 异常,因此无法执行该请求。

- 或 -

由于出现 I/O 设备错误,因此无法执行该请求。

由于记录序列是通过只读访问权限打开的,因此无法执行该操作。

该方法是在序列已释放之后调用的。

没有足够的内存来继续执行该程序。

记录序列已满。

操作系统拒绝了对指定的日志序列的访问。

data 中找不到足以容纳 reservations 的预留。

示例

下面的示例演示如何使用此方法来生成预留。 请注意,只有在使用基于 CLFS 的 LogRecordSequence 类时才能执行此任务。

ReservationCollection reservations = recordSequence.CreateReservationCollection();  
long[] lengthOfUndoRecords = new long[] { 1000 };  
recordSequence.ReserveAndAppend(recordData,  
                                                     userSqn,  
                                                     previousSqn,  
                                                     RecordSequenceAppendOptions.None,  
                                                     reservations,  
                                                     lengthOfUndoRecords);  
recordSequence.Append(undoRecordData,    // If necessary …  
                                    userSqn,  
                                    previousSqn,  
                                    RecordSequenceAppendOptions.ForceFlush,  
                                    reservations);  

注解

包含在 data 参数中的数据将连接成单个字节数组,以便以记录形式追加。 但在读取记录时,无法将数据重新拆分为数组段。

在原子操作中,使用记录追加操作将指定的预留添加到所提供的预留集合。 如果追加失败,将不保留任何空间。

通常,此方法可以在写入记录之前完成。 若要确保记录已写入,请使用 ForceFlush 参数指定 recordAppendOptions 标志,或者调用 Flush 方法。

适用于

.NET Framework 4.8.1 和其他版本
产品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1