185 похожих чатов

Помогите разобраться в чём проблема: У меня есть некий сервис, конформящий

LifecycleHandler:

struct TestService: LifecycleHandler {
let promise: EventLoopPromise<Void>

init(eventLoop: EventLoop) {
self.promise = eventLoop.makePromise()
self.promise.succeed()
}

func shutdownAsync(_ application: Application) async {
try! await promise.futureResult.get()
print("Test service shutdown finished")
}
}

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

И функция configure:

public func configure(_ app: Application) async throws {
app.databases.use(.postgres(configuration: .init(hostname: "localhost", username: "postgres", database: "crash", tls: .prefer(try .init(configuration: .clientDefault)))), as: .psql)

try await print(User.query(on: app.db).count()) // запрос к бд для примера

let eventLoop = app.eventLoopGroup.any()
let service = TestService(eventLoop: eventLoop)
app.lifecycle.use(service)
}

И при попытке завершить приложение кодом SIGTERM или Ctrl+C - оно просто подвисает и не завершается. А в логах висит "Test service shutdown finished".

Экспериментальным способом я выяснил что если:
1. Убрать запрос к бд
или
2. Поменять eventLoop сервиса с .any() на .next()
Тогда всё будет работать как положено (после завершения сервиса - завершается приложение)

Подскажите в чём проблема с запросом или .any()?

5 ответов

24 просмотра

Стикер

Стикер

Mihail-Verenich Автор вопроса

Пробовал, не помогает

Стикер

Mihail Verenich
Пробовал, не помогает

Значит, выполнять запрос к бд всё ещё рановато. Тебе он принципиален или это просто для примера? P.S. Посмотрел у себя — в одном из хэндлеров есть такой код: try? app.disco.unregister(self.execInstance, eventLoop: app.eventLoopGroup.any()).wait() Работает. Но у меня всё без async/await. И еще я бы не стал мешать вместе без необходимости async-методы с eventLoop-методами. Попробуй вместо shutdownAsync() применить просто shutdown(), изменив соответствующим образом код метода?

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

Обсуждают сегодня

Дмитрий, [14.07.2024 15:30] добрый день Дмитрий, [14.07.2024 15:30] не могу разобраться с этим материалом Дмитрий, [14.07.2024 15:30] https://conture.by/post/1927 Дмитрий, ...
Дмитрий
11
Здравствуйте , есть идеи крутых и несложных приложений?
Alexey
54
неужели нельзя было сделать нормальную оконную подсистему?
Mixail Frolov
25
а то есть ещё например такие структуры, и какой у них размер только в рантайме считать struct interface_descr bLength db ? bDescriptorTyp...
Mixail Frolov
22
Кто-то из вас видел хаскель?
Karl {🌪️}{🐊} Shinobi
24
fasm самый топовый ассемблер если нужна универсальность?
Simple Sorcerer
30
Платим за написание удаление кода Мы, разработчики, сидим и код какой-то пишем. Пишем, пишем, его всё больше и больше, а старое почти не удаляем. А когда удаляем то не ясно «...
✌️(´ヮ`)
1
Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Коллеги, а я вот что-то подзапутался. Есть ли сейчас какая-то БД, в которую можно запушить в таблицу/коллекцию JSON, а потом иметь к нему SQL доступ? Это нужно как стейджинг...
Maksim Lapshin
27
Доброго вечера, сижу на Ubuntu, но хочу изучать язык C, знающие, подскажите пожалуйста, какие у меня могут возникнуть трудности именно с совместимостью C с linux, или же проще...
Botsman
33
Карта сайта