У меня сравнительно небольшая распараллеливание (менее десятка потоков), где я хочу при всех условиях одновременно парковать все потоки (некоторые из них могут возобновиться в процессе работы приложения, некоторые - нет).
Поскольку все верхние вызовы выполняются из диспетчеризации akka, которая опирается на BatchingExecutor
, вызовы не обязательно группируются, и код никогда не достигает точки, где все потоки припаркованы в нужном месте!
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
at akka.dispatch.BatchingExecutor$BlockableBatch$$Lambda$784/1938142664.apply$mcV$sp(Unknown Source)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:81)
at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:91)
Как я могу отключитьэто поведение?* У меня нет контроля над упакованным runanble (например, не может расширяться от Batchable
) * У меня нет контекста выполнения управления, поэтому я не могу использовать blocking {}
construct
Мне просто нужна опция конфигурации, чтобы отключитьпорция / установить размер партии на 1
.