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[])

自动创建单个预留,并将记录追加到序列中。 无法继承此方法。

public:
 virtual System::IO::Log::SequenceNumber ReserveAndAppend(System::Collections::Generic::IList<ArraySegment<System::Byte>> ^ data, System::IO::Log::SequenceNumber userRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservationCollection, ... cli::array <long> ^ reservations);
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);
abstract member ReserveAndAppend : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
override this.ReserveAndAppend : System.Collections.Generic.IList<ArraySegment<byte>> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
Public Function ReserveAndAppend (data As IList(Of ArraySegment(Of Byte)), userRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservationCollection As ReservationCollection, ParamArray reservations As Long()) As SequenceNumber

参数

data
IList<ArraySegment<Byte>>

将连接并追加为记录的字节数组段的列表。

userRecord
SequenceNumber

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

previousRecord
SequenceNumber

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

recordAppendOptions
RecordAppendOptions

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

reservationCollection
ReservationCollection

要在其中进行预留的预留集合。

reservations
Int64[]

要做出的预留(以字节为单位)。

返回

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

实现

例外

一个或多个自变量无效。

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

记录序列无法提供足够的可用空间来包含新记录或预留。

在释放序列后调用了该方法。

一个或多个参数是 null

userRecordpreviousRecord 不是此序列的基号和最后一个序列号之间。

无法执行该操作,因为记录序列是使用只读访问权限打开的。

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

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

找不到足够大的预留,无法容纳任何预留项。

注解

参数中包含的 data 数据将串联成单个字节数组,以追加为记录。 但是,在读取记录时,不会设置将数据拆分回数组段。

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

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

适用于

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

自动创建单个预留,并将记录追加到序列中。 无法继承此方法。

public:
 virtual System::IO::Log::SequenceNumber ReserveAndAppend(ArraySegment<System::Byte> data, System::IO::Log::SequenceNumber nextUndoRecord, System::IO::Log::SequenceNumber previousRecord, System::IO::Log::RecordAppendOptions recordAppendOptions, System::IO::Log::ReservationCollection ^ reservationCollection, ... cli::array <long> ^ reservations);
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);
abstract member ReserveAndAppend : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
override this.ReserveAndAppend : ArraySegment<byte> * System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber * System.IO.Log.RecordAppendOptions * System.IO.Log.ReservationCollection * int64[] -> System.IO.Log.SequenceNumber
Public Function ReserveAndAppend (data As ArraySegment(Of Byte), nextUndoRecord As SequenceNumber, previousRecord As SequenceNumber, recordAppendOptions As RecordAppendOptions, reservationCollection As ReservationCollection, ParamArray reservations As Long()) As SequenceNumber

参数

data
ArraySegment<Byte>

将连接并追加为记录的字节数组段的列表。

nextUndoRecord
SequenceNumber

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

previousRecord
SequenceNumber

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

recordAppendOptions
RecordAppendOptions

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

reservationCollection
ReservationCollection

一个 ReservationCollection 包含要在其中进行预留的集合。

reservations
Int64[]

要做出的预留(以字节为单位)。

返回

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

实现

例外

nextUndoRecordpreviousRecord 对于此序列无效。

-或-

data 无法追加,因为它大于最大记录大小。

-或-

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

一个或多个参数是 null

nextUndoRecordpreviousRecord 不是此序列的基号和最后一个序列号之间。

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

-或-

由于 I/O 设备错误,无法执行请求。

无法执行该操作,因为记录序列是使用只读访问权限打开的。

在释放序列后调用了该方法。

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

记录序列已满。

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

找不到足够大的预留,无法容纳任何预留项。

示例

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

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 该方法。

适用于