Как Вы заблокировали бы вниз форму онлайн?

IMO, вариант 1) усложняет использование API, потому что будет два разных пути для сообщения об ошибках:

  1. «Синхронные» исключения, где метод завершает генерируемое исключение. [ 1111]
  2. «Асинхронные» исключения, где метод возвращает CF, что завершается исключением. Обратите внимание, что избежать этого случая невозможно, потому что всегда будут ситуации, когда ошибки обнаруживаются только после запуска асинхронного пути (например, тайм-ауты).

Теперь программист должен убедиться, что оба эти пути правильно обработаны, а не один.

Интересно также отметить, что поведение как для C #, так и для Javascript заключается в том, чтобы всегда сообщать об исключениях, выбрасываемых внутри тела функции async через возвращаемые Task / Promise, даже для исключений, выданных перед первым await, и никогда не заканчивая вызов функции async исключением.

То же самое верно и для сопрограмм Котлина, даже при использовании диспетчера Unconfined

class SynchronousExceptionExamples {
    @Test
    fun example() {
        log.info("before launch")
        val job = GlobalScope.launch(Dispatchers.Unconfined) {
            log.info("before throw")
            throw Exception("an-error")
        }
        log.info("after launch")
        Thread.sleep(1000)
        assertTrue(job.isCancelled)
    }
}

будет получено примечание

6 [main] INFO SynchronousExceptionExamples - before launch
73 [main @coroutine#1] INFO SynchronousExceptionExamples - before throw
(...)
90 [main] INFO SynchronousExceptionExamples - after launch

, поскольку исключение происходит в main нить, однако launch заканчивается правильным Job.

6
задан scheibk 8 January 2009 в 12:52
поделиться

2 ответа

Существует много способов обработать эту ситуацию. Тот путем блокировки формы и разрешения только одного редактирования за один раз. Другой должен обнаружить коллизии при сохранении и предупредить пользователя.

Блокировка является самой полезной на ресурсах с высокой конкуренцией. Если много коллизий ожидаются, затем заставляя пользователя нажать работы кнопки редактирования лучше всего. Это должно отметить запись, как привязано Ваше хранилище данных и должно только позволить одному пользователю редактировать его. Запись должна быть разблокирована, когда пользователь сохраняет запись, или когда пользователь отменяет. В разъединенной ситуации как на веб-странице должно также быть автоматическое, разблокировали после промежутка времени.

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

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

5
ответ дан 17 December 2019 в 02:34
поделиться

Это - эффективное решение, немного тяжелое на видимом управлении наверху, но возможно самом подходящем решении в зависимости от Вашего ожидаемого рабочего процесса.

Другие подходы включают:

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

b. Имейте работу формы как редактора мгновенного эффекта без кнопки Save. Сохраните все открытые представления о форме актуальным использованием XMLHttpConnection к серверу так, чтобы, когда один пользователь вносит изменение в любое поле, это был more-or-less-instantaneously, обновленный на чьей-либо еще копии формы.

1
ответ дан 17 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

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