I noticed “once(concurrent_and(” behaves like “first_solution(”.
It probably means that when “concurrent_and” returns a result and “once” commits to it then concurrent_and will stop and cleanup the remaining threads. I tried various experiments with timings and even print calls within the threads to confirm that. Very nice that it does, but also unexpected, does anybody have a better idea of why it is the case (or not the case for an particular example) and whether that corresponds to be the intended behavior?
I see, thank you for clarifying! I agree it is consistent with the semantics of once, but I was not sure if that also works for multi-threaded constructs like concurrent_and, I am glad it does.