Size: a a a

2020 October 11

Dv

Dr. Friedrich von Ne... in codingteam
Anton Burkin
Хм, думаешь он сначала банит, а потом разбанивает сам же?
Допускаю, что так.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Особенно если KickChatMemberAsync работает дольше, чем RestrictChatMemberAsync
источник

Dv

Dr. Friedrich von Ne... in codingteam
Ладно, я вижу несколько решений
источник

Dv

Dr. Friedrich von Ne... in codingteam
Во-первых, можно сделать оптимистичную проверку перед следующим действием
источник

Dv

Dr. Friedrich von Ne... in codingteam
А не удалили ли ещё юзера, которого мы хотим разбанить, из коллекции пользователей (что будет означать. что его уже отпроцессили в другом потоке)
источник

Dv

Dr. Friedrich von Ne... in codingteam
Но это всё ещё не супер надёжно
источник

Dv

Dr. Friedrich von Ne... in codingteam
Можно просто юзера пораньше удалять.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Ну, типа, взяли и сразу удалили. GetAndUpdate там наверняка какой-нибудь есть.
источник

AB

Anton Burkin in codingteam
Хм, read-write slim ещё в голову приходит.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Anton Burkin
Хм, read-write slim ещё в голову приходит.
Смотря как ты его будешь шардировать.
источник

AB

Anton Burkin in codingteam
Dr. Friedrich von Never
Смотря как ты его будешь шардировать.
А вот это вопрос хороший.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Если пошардить блокировки по юзерам — то будет норм
источник

Dv

Dr. Friedrich von Ne... in codingteam
Но тогда будет довольно дохрена блокировок
источник

c

codingteam@cjr in codingteam
Minoru
насколько я вижу, _usersStore используется только для принятия решения в первом if. Поэтому, во-первых, можно Get и Remove переместить в критическую секцию в начале кода, во-вторых, наверняка есть какой-нибудь метод Take, возвращающий Option — лучше переехать на него
источник

Dv

Dr. Friedrich von Ne... in codingteam
Там под капотом есть TryGetValue, вот типа того
источник

c

codingteam@cjr in codingteam
Minoru
нам надо не просто Get, нам надо, чтобы элемент был удалён из коллекции
источник

Dv

Dr. Friedrich von Ne... in codingteam
Ага, и получается, что конкурентная коллекция не нужна, и сгодится обычная с блокировкой.
источник

Dv

Dr. Friedrich von Ne... in codingteam
Правда, там есть ещё какой-то GetAll непонятный
источник

Dv

Dr. Friedrich von Ne... in codingteam
Который используется в методе BanSlowUsers %)
источник

c

codingteam@cjr in codingteam
Minoru
ну, надо смотреть на этот UserStore, может, там ещё какие-то методы есть, для которых нужна конкурентность. Но в рамках вот этой вот функции — да, я считаю, что конкурентность не нужна
источник