Vorrei implementare la mia elaborazione asincrona con scalaz.concurrent.Task. Ho bisogno di una funzione di (Task[A], Task[B]) => Task[(A, B)]
per restituire un nuovo compito che funziona come segue:Come comporre due attività parallele per annullare un'attività se un'altra fallisce?
- corsa
Task[A]
eTask[B]
in parallelo e attendere i risultati; - se una delle attività non riesce, annulla il il secondo e attendi finché non termina;
- restituisce i risultati di entrambe le attività.
Come implementare tale funzione?
Ci sono diverse cose che _cancel_ potrebbe significare qui. Vuoi semplicemente che il calcolo fallisca velocemente? Allora qualcosa del tipo 'both' su' Nondeterminism' funzionerà. Se vuoi evitare anche sprecare cicli (o vuoi annullare gli effetti del calcolo ancora in esecuzione) sarà più complicato. –
Sì, voglio solo che il calcolo fallisca velocemente per ora. – Michael