|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
||||||
Не выполнять метод и не создавать объект, пока предыдущий вызов не закончит работу10.08.2018, 01:40. Показов 1833. Ответов 14
Метки нет (Все метки)
Привет! Я пишу многопользовательское приложение, в котором люди оставляют заказы и они регистрируются в системе. Для оформления заказа я создаю объект и вызываю метод:
Да, знаю, что это не совсем правильно, а, вернее, совсем неправильно, но это вынужденная, хоть и временная мера. Благо, системой этой будет пользоваться не очень много людей и не очень интенсивно. Так вот, подскажите, как исключить конфликты, когда два человека примерно в одно время оформляют заказ? То есть не создавать объект и не выполнять метод и хранить информацию о следующем заказе, пока не выполнится метод LogOut()?
0
|
||||||
| 10.08.2018, 01:40 | |
|
Ответы с готовыми решениями:
14
когда алгоритм закончит свою работу?
|
|
|
|
| 10.08.2018, 01:54 | |
|
Скинь код, в котором ты имитируешь проблему. То есть, если это, например, консольное приложение (сервер), то скинь его (не всю реализацию, можно даже с пустыми методами, просто макет рабочий). Например, я посмотрю и увижу метод, из кода которого будет понятно, что если этот метод вызовут одновременно (или почти), то будет ошибка. Вот так будет тебе помочь значительно легче.
Добавлено через 2 минуты Я представляю это так: в CreateOrder вызывается операция авторизации по конкретному пользователю, создаётся заказ и потом вызывается тот самый LogOut. Авторизованным может быть только один пользователь в один момент времени. Тебе нужно, чтобы если пришло несколько запросов от разных людей, то все эти несколько заказов создались и система не легла. Верно? Добавлено через 25 секунд Если я всё верно понял, то код не нужен. Добавлено через 17 секунд Но нужен твой ответ. Добавлено через 4 минуты Первое, что пришло на ум - создать потокобезопасную очередь и обрабатывать сообщения по очереди (она может пополняться одновременно из неё браться данные на обработку).
1
|
|
|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
|
| 10.08.2018, 02:19 [ТС] | |
|
Casper-SC, увы, авторизация вызывается не по конкретному пользователю, а для одного единственного - администратора. Именно он отправляет данные в систему. То есть администратор авторизовался, добавил заказ и вышел.
Если нужен код, то я отправлю его утром.
0
|
|
|
|
||||||
| 10.08.2018, 04:24 | ||||||
Сообщение было отмечено DenKG как решение
Решение
Говоря про очередь, я имел ввиду что-то вроде такого:
1
|
||||||
|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
|||||||||||
| 10.08.2018, 12:31 [ТС] | |||||||||||
|
Casper-SC, вот мой код.
Тут мы создаем объект и вызываем метод для добавления заказа:
0
|
|||||||||||
|
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
|
|
| 10.08.2018, 21:10 | |
|
Не очень понимаю, как конкретно выглядит система, но разве тут нельзя использовать паттерн Singleton?
Началась сессия - в объекте что-то есть. После окончания сессии - на обьект вкидывайте null
0
|
|
|
|
|
| 10.08.2018, 21:35 | |
|
zewer, по-моему я автору уже дал ответ (в смысле я не пойму, почему автор думает, что тот ответ не подошёл).
Если у нас никак нельзя сделать с текущим кодом, кроме как выполнять по очереди, то делаем очередь и сохраняем заказы по очереди. Добавлено через 1 минуту И про синглтон вообще не понял, как он тут поможет. Добавлено через 1 минуту Вероятно, имеется ввиду, что есть экземпляр класса, который содержит в себе очередь и он синглтон? Или что? Автору, судя по всему, нужна возможность подключиться нескольким админам и чтобы их заказы были сохранены.
0
|
|
|
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
|
||
| 10.08.2018, 21:48 | ||
|
Если да - ждать/поместить в очередь/что-то инное, потому что не очень понимаю как выглядит система П.С. Система то клиент-сервер-БД ?
0
|
||
|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
||
| 10.08.2018, 23:08 [ТС] | ||
|
Casper-SC, нет, я с вами согласен. Всё хорошо) Просто на всякий случай привёл код. Вдруг у вас бы появились еще идеи
![]() P.S.:И такой вопросик, не совсем относящийся к теме. А вот этот метод public async void InsertOperation(Order order, Client client, bool result) может вернуть булево значение?Добавлено через 3 минуты
0
|
||
|
|
|||||||
| 10.08.2018, 23:12 | |||||||
0
|
|||||||
|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
|
| 10.08.2018, 23:14 [ТС] | |
|
0
|
|
|
|
|||||||
| 10.08.2018, 23:19 | |||||||
|
Последний метод, который вызывает всю цепочку асинхронных методов, тот который async void должен во-первых ожидать результат через await, во вторых этот вызов должен быть помещён в try catch и логироваться исключение.
Добавлено через 2 минуты Добавлено через 55 секунд Начало сообщения про это:
Пустая переданная строка в метод ничего не значит. Это просто чтобы компилилось ![]() Вывод инфы в Console.WriteLine это не логирование, это просто мне лень писать боевое логирование
1
|
|||||||
|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
|
| 10.08.2018, 23:19 [ТС] | |
|
Casper-SC, спасибо большое
0
|
|
|
11 / 11 / 7
Регистрация: 23.12.2015
Сообщений: 950
|
|
| 11.08.2018, 00:03 [ТС] | |
|
Casper-SC, логгер у меня есть в консоль и в файл )
0
|
|
| 11.08.2018, 00:03 | |
|
Помогаю со студенческими работами здесь
15
Выполнять пока не прошло n секунд Выполнять операции, пока зажата клавиша
Выполнять цикл, пока не возникнет ошибка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|