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

要建立的保留區 (以位元組為單位)。

傳回

SequenceNumber

已附加之記錄的序號。

實作

例外狀況

一或多個引數無效。

附加記錄時發生 I/O 錯誤。

記錄順序無法騰出足夠的可用空間來容納新的記錄或建立保留區。

已在處置序列之後呼叫此方法。

一或多個引數為 null

userRecordpreviousRecord 不是介於這個順序的基底序號和最後一個序號之間。

記錄順序是以唯讀存取所開啟,無法執行作業。

沒有足夠的記憶體可以繼續執行程式。

存取指定的記錄順序遭作業系統拒絕。

data 找不到有足夠空間可以容納 reservations 的保留區。

備註

包含在 data 參數中的資料將串連至單一位元組陣列中,以便附加成記錄。 不過,在讀取記錄時,並不會將資料分割回陣列區段。

指定的保留區會在不可部分完成的作業 (Atomic Operation) 與記錄附加作業中,加入至提供的保留區集合。 如果附加失敗,就不會保留任何空間。

這個方法通常可以在寫入記錄前完成。 若要確定已寫入某筆記錄,請使用 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[]

要建立的保留區 (以位元組為單位)。

傳回

SequenceNumber

已附加之記錄的序號。

實作

例外狀況

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 參數中的資料將串連至單一位元組陣列中,以便附加成記錄。 不過,在讀取記錄時,並不會將資料分割回陣列區段。

指定的保留區會在不可部分完成的作業 (Atomic Operation) 與記錄附加作業中,加入至提供的保留區集合。 如果附加失敗,就不會保留任何空間。

這個方法通常可以在寫入記錄前完成。 若要確定已寫入某筆記錄,請使用 ForceFlush 參數指定 recordAppendOptions 旗標,或是呼叫 Flush 方法。

適用於