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[]
Резервирования, которые нужно сделать, в байтах.
Возвращаемое значение
Порядковый номер добавленной записи журнала.
Реализации
Исключения
Один или несколько аргументов являются недопустимыми.
При добавлении записи произошла ошибка ввода-вывода.
Последовательность записей не могла сделать достаточно свободного места для хранения новой записи или резервирования.
Метод был вызван после удаления последовательности.
Один или несколько аргументов.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.
Примеры
В следующем примере показано, как использовать этот метод для резервирования. Обратите внимание, что эта задача может выполняться только при использовании класса на основе LogRecordSequence CLFS.
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 метод.