/**
* Executed by Co::any() or Co::race().
* @param mixed $value
* @param callable $filter self::reverse or self::fail.
* @param string $message Used for failure.
* @return \Generator
*/
public static function anyOrRace($value, callable $filter, $message)
{
$value = YieldableUtils::normalize($value);
$yieldables = YieldableUtils::getYieldables($value);
$wrapper = self::getWrapperGenerator($yieldables, $filter);
try {
$results = (yield $wrapper);
} catch (ControlException $e) {
(yield CoInterface::RETURN_WITH => $e->getValue());
}
$apply = YieldableUtils::getApplier($value, $yieldables);
throw new AllFailedException($message, 0, $apply($results));
}