module concurrency.operations.raceall;

import concurrency;
import concurrency.receiver;
import concurrency.sender;
import concurrency.stoptoken;
import concurrency.utils : spin_yield, casWeak;
import concurrency.operations.race : RaceSender;
import concepts;
import std.traits;

/// Runs both Senders and propagates the value of whoever completes first
/// if both error out the first exception is propagated,
/// uses mir.algebraic if the Sender value types differ
RaceSender!(Senders) raceAll(Senders...)(Senders senders) {
  return RaceSender!(Senders)(senders, true);
}