Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

224
Vistas
Obtener valor de withTimeout

Estoy ejecutando una rutina que lee de un canal receiverChannel . Tengo esta corrutina envuelta en un tiempo de espera y quiero obtener la cantidad de mensajes que logró leer antes de que el tiempo de espera la cancele. Esto es lo que tengo:

 runBlocking { val receivedMessages = withTimeoutOrNull(someTimeout) { var found = 0 while (isActive && found < expectedAmount){ val message = incomming.receive() // some filtering found++ } found } ?: 0 // <- to not have null... // Currently prints 0, but I want the messages it managed to read println("I've received $receivedMessages messages") }

Sé que puedo usar atomicInteger, pero me gustaría mantenerme alejado de los detalles de Java aquí

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Las variables locales en una corrutina no necesitan ser atómicas debido a la garantía de que sucede antes , aunque puede haber algún intercambio de subprocesos. Su código no tiene ningún paralelismo, por lo que puede usar lo siguiente:

 runBlocking { var receivedMessages = 0 withTimeoutOrNull(someTimeout) { while (isActive && receivedMessages < expectedAmount){ val message = incomming.receive() // some filtering receivedMessages++ } } println("I've received $receivedMessages messages") }

Si tiene varias corrutinas secundarias ejecutándose en paralelo, puede usar un Mutex. Más información aquí

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda