Хорошо, новый для gpars, пожалуйста, простите меня, если у этого есть очевидный ответ.Завершить существующий пул, когда все работы завершены
Вот мой сценарий. В настоящее время мы имеем часть нашего кода, завернутую в блок Thread.start {}. Он делает это, чтобы он мог отправлять сообщения в очередь сообщений в фоновом режиме, а не блокировать запрос пользователя. Проблема, с которой мы недавно столкнулись, заключается в том, что для больших блоков работы пользователи могут выполнить другое действие, которое приведет к повторному выполнению этого блока. Поскольку он имеет резьбу, вторая передача сообщений может быть отправлена до первого появления поврежденных данных.
Я хотел бы изменить этот процесс, чтобы работать как поток очереди с gpars. Я видел примеры создания пулов, таких как
def pool = GParsPool.createPool()
или
def pool = new ForkJoinPool()
, а затем, используя бассейн,
GParsPool.withExistingPool(pool) {
...
}
Это похоже было бы объяснить в том случае, если пользователь снова выполняет действие, я могу повторно использовать созданный пул, и действия не будут выполняться не в порядке, если у меня есть размер пула.
Мой вопрос в том, что это лучший способ сделать это с помощью gpars? И, кроме того, как я узнаю, когда пул завершил всю свою работу? Прерывается ли это, когда все работы завершены? Если да, существует ли метод, который можно использовать для проверки завершения или завершения пула, чтобы узнать, что мне нужен новый?
Любая помощь будет оценена по достоинству.
Я смущен. Кажется, что и withPool, и с использованием ExistingPool. Я сделал несколько тестов и логики после закрытия, как только пул закончил. Это не то, что я хочу. Я не хочу, чтобы пул блокировал выполнение. – Taplar
Тогда, возможно, вам может понадобиться другая абстракция.В общем, задачи и обещания потока данных дают вам большую гибкость. –
Я считаю, что у нас есть рабочее решение с участием актеров. Я отправлю свое окончательное решение, как только мы уверены, что мы довольны этим, :) – Taplar