Re[17]: Про обработку ошибок - типовые решения
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.04.25 06:42
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>И? Вы его сбросили и установили в другой — далее что? Автоматом все запросы отменятся что ли?

Логично всем запросам, у которых есть cancellation token, выдать cancel.
Тех, у которых нету — надо просто игнорировать их результат. Всё, пользователь ушёл, результат запроса уже нерелевантен.
И всё это делается в процессе логаута. Пользователь пытается выйти из системы — приложение дожидается окончания (либо завершения, либо отмены) всех асинхронных запросов.
Как раз для того, чтобы не было вопроса, "а чо делать, когда Вася проснулся, а голова — в тумбочке".

S>Вот в этом у вас и проблема... В 2025 году так никто не делает. Программа продолжает работать, просто переходит на страницу входа — вот в чем фишка.

У меня как раз проблем нет.
S>Понимаете ли что реальность — она другая. По логике вещей — пользователь вышел — и все должно схлопнуться, исчезнуть, задиспозится. Но нет — так нельзя. Программа по прежнему работает.
Так это же ваша программа. Как сделаете — так и будет. Вот, например, microsoft office позволяет как залогиниться в онлайн-аккаунт, так и сделать sign out. При этом никаких "асинхронных процессов" не остаётся.

S>>>Но нет же, при выходе приложение не убивается а продолжает работать — просто переходит на страницу входа. Тогда что же?

S>>Тогда закрыть все формы и освободить связанные с ними структуры данных, в которых используется сессионный токен.

S>Вот именно что:


S>1. Закрыть все формы.

S>2. Обнулить все состояния.
S>3. Оборвать все запросы и длительные операции.
Всё верно.
S>Не просто формы — сейчас в формах никто данные не хранит, еще раз вам говорю — данные изменяются отдельно — и при изменении даных несколько форм может обновиться.
Ну так и в чём проблема?

S>Далее, ок. Обнулили данные. А как быть если уже вызвана асинхронная функция, которая делает несколько запросов к серверу? После каждого запроса вам нужно что? Правильно, проверять актуален ли пользователь и если НЕТ — то что? Херачить запросы далее или?

Ну так это вам виднее. См. п.1.

S>Так дело вот в чем. Чтобы эта ошибка проявилась — нужно не простои изменить пользователя. Нужно чтобы первый пользователь запустил некую длительную операцию, которая выполняется дольше чем вход/выход из аккаунта. Это трудноуловимые ошибки и тестеры их не обнаружат да и пользователи очень редко когда столкнуться.

Нет там никаких операций, которые выполняются дольше, чем вход/выход из аккаунта.
Такую операцию придётся специально придумать. И в ней не будет никаких чудес. Если я сделал заявку на кредит и вышел из аккаунта, а мне её завтра одобрили — в приложение ничего не придёт.
Это была бы огромная дыра в security. За такое могут и лицензию отобрать.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.