LogRecordSequence.ReserveAndAppend 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
自动生成一个预留,并向序列中追加一条记录。
重载
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
。
userRecord
或 previousRecord
不在此序列的基序列号和最新序列号之间。
由于记录序列是通过只读访问权限打开的,因此无法执行该操作。
没有足够的内存来继续执行该程序。
操作系统拒绝了对指定的日志序列的访问。
在 data
中找不到足以容纳 reservations
的预留。
注解
包含在 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[]
要生成的预留(以字节为单位)。
返回
追加的日志记录的序列号。
实现
例外
nextUndoRecord
或 previousRecord
对此序列无效。
- 或 -
无法追加 data
,原因是它比最大记录大小要大。
- 或 -
reservations
不是由此记录序列创建的。
一个或多个参数为 null
。
nextUndoRecord
或 previousRecord
不在此序列的基序列号和最新序列号之间。
由于记录序列是通过只读访问权限打开的,因此无法执行该操作。
该方法是在序列已释放之后调用的。
没有足够的内存来继续执行该程序。
记录序列已满。
操作系统拒绝了对指定的日志序列的访问。
在 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 方法。