Почему точно однажды неосуществимая семантика?

Переменная coa не объявлена ​​в вашем коде. Итак, я предполагаю, что это вариант. Вы присваиваете ему значение "" в начале вашего кода, и это делает его вариантом строкового типа. Затем ваш код проверяет, действительно ли оно имеет нулевое строковое значение, что выглядит излишним, поскольку вы просто присвоили ему это значение, но если оно действительно имеет это значение, ваш код переходит к присвоению ему массива. Это превращает его в вариант типа массива. Обратите внимание, что массив не может иметь значение "". Я предлагаю вам объявить cao тем, кем вы хотите, и относиться к нему как к такому.

Массив, присвоенный cao, является массивом всех элементов, выбранных в ListBox. Это может быть ни один или несколько. Нет возможности узнать, посмотрев на код.

Однако, For i = 0 To partab.ListBox2.ListCount - 1 пытается прочитать все значения в ListBox из массива cao. Это должно быть возможно только в том случае, если были выбраны все элементы в ListBox, поскольку cao содержит только выбранные элементы. Поэтому строка If arr(i) = "Vehicle-Vehicle" Then должна выдавать ошибку индекса, когда i больше, чем UBound (cao).

Предлагаю отформатировать цикл как For i = LBound(cao) To UBound(cao). Это вылечит эту конкретную ошибку. Могут быть и другие.

10
задан Daniel O 6 January 2009 в 13:43
поделиться

3 ответа

Рассмотрите то, что происходит, если сервер отказывает между выполнением запроса и записью, что это выполнило запрос?

Можно добраться самое большее однажды путем записи запроса, затем выполнения его. если Вы получаете катастрофический отказ между этими двумя, то Вы (ошибочно) записали его, как выполнено, таким образом, Вы не сделаете этого снова. Следовательно самое большее однажды

Причудливо, этот (с тайм-аутами) запатентован: http://www.freepatentsonline.com/7162512.html. За исключением я спорю выше, это не гарантирует точно однажды.

Вы добираетесь, по крайней мере однажды, путем выполнения его, затем записи его. Если Вы получите катастрофический отказ между этими двумя, то Вы выполните его снова, если запрос будет повторен.

Но не действительно выполнимо сказать "точно однажды" при всех обстоятельствах

(Существуют подобные сценарии для сетевых ошибок, а не катастрофических отказов сервера),

24
ответ дан 3 December 2019 в 15:36
поделиться

Высокопроизводительные шины обмена сообщениями, как WebSphere MQ IBM действительно подразумевают предлагать точно однажды доставка. На самом деле это - поведение по умолчанию (по состоянию на прошлый раз, когда я использовал WMQ...). Они достигают этого с Журналами с упреждающей записью и разнообразием блокировки методов.

Конечно, я не сомневаюсь, что проложил под землей где-нибудь в их легальных документах, "точно однажды" на самом деле определяется, чтобы означать, что "сообщение может или не может быть передано, однажды, несколько раз. Или партии. Или меньше, чем нуль". для покрытия их спин, но это действительно работает в подавляющем большинстве случаев, включая выгоняние силовых кабелей, взятие осей к сетевой инфраструктуре, и т.д.

3
ответ дан 3 December 2019 в 15:36
поделиться

Я думаю, что ответ - то, что Вам было бы нужно неопределенное количество времени для получения их семантика, потому что клиент должен будет ожидать категорического результата сервера, который никогда не может прибывать. То требование непрактично в реальных сетях.

Если клиент когда-нибудь бросает пробовать (или если сервер понижается в течение длительного периода или прежде, чем завершить транзакцию или прежде, чем сигнализировать, что это завершено, завися, что приказывает, чтобы это сделало те вещи), затем не может быть никакого способа для клиента знать, был ли запрос получен и обработан. На практике системы RPC могут, например, хотеть уважать тайм-ауты TCP по умолчанию, не хотите должными быть ожидать категорической успешности или неуспешности с сервера.

Это - предположение хотя: Я никогда не разрабатывал протокол RPC.

1
ответ дан 3 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: