LogRecordSequence.ReserveAndAppend 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
自動進行單一預約,並將紀錄附加到序列後面。
多載
| 名稱 | 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。
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 A是包含可預訂的收藏。
- 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方法。