ValueType. Вопрос: isAlive даёт же мне гарантию, что если isAlive == true, то гарантированно метод, в котором эта переменная объявлена, ещё не завершился?
Далее второй вопрос тупее первого: есть ли какие более "гарантированные" методы определения, что какой-то конкретный метод уже отработал, кроме как создание WeakReference на локальную переменную в методе с дальнейшей проверкой isAlive?
Коллбэкы, bool флаг
Ну, коллбэк как я зарегаю на завершение метода?
Передать в метод как параметр
а в WR положить переменную зато есть возможность?
Да, т.к. регать повезде коллбэки не всегда удобно. А сделать out int myVar куда проще.
Как ты взял викреф на value type?
По второму вопросу: имхо, ты делаешь какую-то муть. Опиши изначальную проблему.
Дядь, смотри. Я хотел сделать генерацию DbContext в своём скоупе без использования using с new или IServiceScopeFactory для резолва скоупа, а в нём - контекста. Точнее, так: я хочу иметь возможность запускать параллельно несколько запросов к одному контексту (например, UserDbContext). Для этого придётся каждый из них создавать в своём scope. Вот мы и подошли к тому, что мне нужно иметь возможность сделать как-то типа такого await userDbContextProxy.Resolve(out token).Users.Where(...)...
а не проще скоупы создавать? Звучит как неподдерживаемая дичь
Я и хочу это делать, но хитрее. Собственно, я де-факто это и хотел делать.
Звучит как какая-то слабо нужная хрень и попытка сэкономить на спичках, которая потом выльется в бОльшие затраты человековремени чем сэкономит сейчас. Но можете сделать сервис, который будет смотреть в AsyncLocal на предмет наличия контекста. Если есть - отдаёт созданный/зарезолвенный. Если нет - создаёт/резолвит, сохраняет в AsyncLocal и отдаёт. Я понятия, правда, не имею как именно вы будете их создавать и диспоузить потом (диспоуз вместе с сервисом, может быть?)
Я хотел создать условную проксю, которая резолвит контекст каждый раз.
Я думаю, что примерно понял, что ты хочешь, но деталей всё ещё не понял. Мб покажешь какой-то кусочек кода?
А если его просто добавить как Transient?
Ну, дядь, вроде MS не рекомендует менять service lifetime для DbContext со scoped.))) Кусочек кода через шарплаб попробую накидать, скинуть. Правда, чур за такой код потом ссанными тряпками из чата не гнать за профнепригодность.😂 А с интрузивным списком не совсем понимаю, как его свойства можно юзать?🧐
Дак ну ты уже пошёл поперёк этих рекомендаций, когда захотел, чтоб у него был другой лайфтайм 🤷♂️
Я все ещё не понял в чем проблема создавать скоп
Мне кажется, это и нужно делать
Так я не хочу лайфтайм менять, я хочу иметь возможность создать любое количество контекстов без тупого var newScope = serviceScopeFactory.CreateScope(); var newContext = newScope.ServiceProvider.GetRequiredService<MyDbContext>();
«создать любое количество контекстов» — это и есть «поменять лайфтайм» :)
Обсуждают сегодня