LogRecordSequence.ReserveAndAppend Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an.
Überlädt
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an. Diese Methode kann nicht vererbt werden. |
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[]) |
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an. Diese Methode kann nicht vererbt werden. |
ReserveAndAppend(IList<ArraySegment<Byte>>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an. Diese Methode kann nicht vererbt werden.
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
Parameter
- data
- IList<ArraySegment<Byte>>
Eine Liste von Bytearraysegmenten, die verkettet und als Datensatz angefügt werden.
- userRecord
- SequenceNumber
Die Sequenznummer des nächsten Datensatzes in der vom Benutzer angegebenen Reihenfolge.
- previousRecord
- SequenceNumber
Die Sequenznummer des nächsten Datensatzes in vorheriger Reihenfolge.
- recordAppendOptions
- RecordAppendOptions
Ein gültiger Wert für RecordAppendOptions, der angibt, wie die Daten geschrieben werden sollten.
- reservationCollection
- ReservationCollection
Die Reservierungsauflistung, in der Reservierungen vorgenommen werden können.
- reservations
- Int64[]
Die vorzunehmenden Reservierungen in Byte.
Gibt zurück
Die Sequenznummer des angefügten Datensatzes.
Implementiert
Ausnahmen
Mindestens eines der Argumente ist ungültig.
Beim Anfügen des Datensatzes ist ein E/A-Fehler aufgetreten.
Die Datensatzsequenz konnte nicht genügend freien Speicherplatz bereitstellen, um den neuen Datensatz zu enthalten oder die Reservierung auszuführen.
Die Methode wurde aufgerufen, nachdem die Sequenz verworfen wurde.
Mindestens ein Argument ist null
.
userRecord
oder previousRecord
befindet sich nicht zwischen der Basissequenznummer und der letzten Sequenznummer dieser Sequenz.
Der Vorgang kann nicht ausgeführt werden, da die Datensatzsequenz mit schreibgeschütztem Zugriff geöffnet wurde.
Der Arbeitsspeicher reicht nicht aus, um die Ausführung des Programms fortzusetzen.
Der Zugriff auf die angegebene Protokollsequenz wird vom Betriebssystem verweigert.
Keine Reservierung, die groß genug für data
ist, kann in reservations
gefunden werden.
Hinweise
Die im data
-Parameter enthaltenen Daten werden zum Anfügen als Datensatz in einem Array mit einem Byte verkettet. Die Daten können jedoch nicht wieder in Arraysegmente aufgeteilt werden, nachdem der Datensatz gelesen wurde.
Die angegebenen Reservierungen werden in einer atomaren Operation mit einem Vorgang zum Anfügen von Datensätzen der bereitgestellten Reservierungsauflistung hinzugefügt. Wenn der Anfügevorgang scheitert, wird kein Speicherplatz reserviert.
Normalerweise kann diese Methode abgeschlossen werden, bevor der Datensatz geschrieben wird. Um sicherzustellen, dass ein Datensatz geschrieben wurde, geben Sie entweder das ForceFlush-Flag mithilfe des recordAppendOptions
-Parameters an, oder rufen Sie die Flush-Methode auf.
Gilt für:
ReserveAndAppend(ArraySegment<Byte>, SequenceNumber, SequenceNumber, RecordAppendOptions, ReservationCollection, Int64[])
Führt automatisch eine einzelne Reservierung durch und fügt der Sequenz einen Datensatz an. Diese Methode kann nicht vererbt werden.
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
Parameter
- data
- ArraySegment<Byte>
Eine Liste von Bytearraysegmenten, die verkettet und als Datensatz angefügt werden.
- nextUndoRecord
- SequenceNumber
Die Sequenznummer des nächsten Datensatzes in der vom Benutzer angegebenen Reihenfolge.
- previousRecord
- SequenceNumber
Die Sequenznummer des nächsten Datensatzes in vorheriger Reihenfolge.
- recordAppendOptions
- RecordAppendOptions
Ein gültiger Wert für RecordAppendOptions, der angibt, wie die Daten geschrieben werden sollten.
- reservationCollection
- ReservationCollection
Eine ReservationCollection, die die Auflistung enthält, in der Reservierungen vorgenommen werden.
- reservations
- Int64[]
Die vorzunehmenden Reservierungen in Byte.
Gibt zurück
Die Sequenznummer des angefügten Datensatzes.
Implementiert
Ausnahmen
nextUndoRecord
oder previousRecord
ist für diese Sequenz nicht gültig.
- oder -
data
kann nicht angefügt werden, da die maximale Datensatzgröße überschritten wird.
- oder -
reservations
wurde nicht von dieser Datensatzsequenz erstellt.
Mindestens ein Argument ist null
.
nextUndoRecord
oder previousRecord
befindet sich nicht zwischen der Basissequenznummer und der letzten Sequenznummer dieser Sequenz.
Die Anforderung konnte aufgrund einer unerwarteten E/A-Ausnahme nicht ausgeführt werden.
- oder -
Die Anforderung konnte aufgrund eines E/A-Gerätefehlers nicht ausgeführt werden.
Der Vorgang kann nicht ausgeführt werden, da die Datensatzsequenz mit schreibgeschütztem Zugriff geöffnet wurde.
Die Methode wurde aufgerufen, nachdem die Sequenz verworfen wurde.
Der Arbeitsspeicher reicht nicht aus, um die Ausführung des Programms fortzusetzen.
Die Datensatzsequenz ist voll.
Der Zugriff auf die angegebene Protokollsequenz wird vom Betriebssystem verweigert.
Keine Reservierung, die groß genug für data
ist, kann in reservations
gefunden werden.
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie Sie mit dieser Methode Reservierungen vornehmen. Beachten Sie, dass diese Aufgabe nur bei Verwendung der CLFS-basierten LogRecordSequence-Klasse ausgeführt werden kann.
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);
Hinweise
Die im data
-Parameter enthaltenen Daten werden zum Anfügen als Datensatz in einem Array mit einem Byte verkettet. Die Daten können jedoch nicht wieder in Arraysegmente aufgeteilt werden, nachdem der Datensatz gelesen wurde.
Die angegebenen Reservierungen werden in einer atomaren Operation mit einem Vorgang zum Anfügen von Datensätzen der bereitgestellten Reservierungsauflistung hinzugefügt. Wenn der Anfügevorgang scheitert, wird kein Speicherplatz reserviert.
Normalerweise kann diese Methode abgeschlossen werden, bevor der Datensatz geschrieben wird. Um sicherzustellen, dass ein Datensatz geschrieben wurde, geben Sie entweder das ForceFlush-Flag mithilfe des recordAppendOptions
-Parameters an, oder rufen Sie die Flush-Methode auf.