Seleccionar
Una operación select espera hasta que un conjunto de futuros esté listo y responde al resultado de ese futuro. En JavaScript, esto es similar a Promise.race
. En Python, se compara con asyncio.wait(task_set, return_when=asyncio.FIRST_COMPLETED)
.
Similar to a match statement, the body of select!
has a number of arms, each of the form pattern = future => statement
. When a future
is ready, its return value is destructured by the pattern
. The statement
is then run with the resulting variables. The statement
result becomes the result of the select!
macro.
Speaker Notes
This slide should take about 5 minutes.
-
En este ejemplo, tenemos una carrera entre un gato y un perro.
first_animal_to_finish_race
escucha a ambos canales y elige el que llegue primero. Como el perro tarda 50 ms, gana al gato, que tarda 500 ms. -
En este ejemplo, puedes usar canales
oneshot
, ya que se supone que solo recibirán unsend
. -
Prueba a añadir un límite a la carrera y demuestra cómo se seleccionan distintos tipos de futuros.
-
Ten en cuenta que
select!
elimina las ramas sin coincidencias, cancelando así sus futuros. Es más fácil de usar cuando cada ejecución deselect!
crea futuros.- También puedes enviar
&mut future
en lugar del futuro en sí, pero esto podría provocar problemas, como se explica más adelante en la diapositiva sobre pines.
- También puedes enviar