ASIO provides very specific limited ordering invariants in the use of a strand. The issue in this case was that two jobs are posted to the same strand object with the expectation that they are executed in the same order in which they are posted. ASIO provides this invariant in only in the case where the jobs are both posted or dispatched from the same strand, even when those operations originate from different, asynchronously chained handlers executing on that strand. In the failing test case this condition held, but the two jobs were posted from different handlers executing on the same strand. Given that the handlers were asynchronously chained, the call order was assured, and the conditions were therefore satisfied. However on Linux the invariant did not hold, and appears to require that the jobs be posted from the same handler on the strand (which means in the same thread).