語言

LogRecordSequence.ReserveAndAppend 方法

定義

自動進行單一預約,並將紀錄附加到序列後面。

多載

名稱 Description
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 不位於該序列的基數與末一序列號之間。

由於記錄序列是以唯讀開啟,無法執行此操作。

記憶體不足以繼續執行程式。

作業系統會拒絕存取指定的日誌序列。

找不到足夠大的保留地可容納 datareservations

備註

參數中 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 A是包含可預訂的收藏。

reservations
Int64[]

要做的預約,以位元組計算。

傳回

附加日誌記錄的序號。

實作

例外狀況

nextUndoRecordpreviousRecord 是對此序列不適用。

-或-

data 無法附加,因為它超過最大記錄大小。

-或-

reservations 並非由此紀錄序列所創造。

其中一個或多個參數為 null

nextUndoRecordpreviousRecord 不位於該序列的基數與末一序列號之間。

由於意外的 I/O 異常,請求無法執行。

-或-

由於 I/O 裝置錯誤,請求無法執行。

由於記錄序列是以唯讀開啟,無法執行此操作。

該方法是在序列被處理後才被呼叫的。

記憶體不足以繼續執行程式。

紀錄序列已滿。

作業系統會拒絕存取指定的日誌序列。

找不到足夠大的保留地可容納 datareservations

範例

以下範例說明如何使用此方法訂位。 請注意,此任務只能在使用 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方法。

適用於