As a followup and a concrete example, here's what C++ is competing against; this piece of C# code starts an asynchronous read of a file and waits for it to complete up to some timeout value; only platform facilities are used here (i.e., no external libraries). How does ReadAsync complete? Executor? Thread? OS-callback? Don't know, don't care, it works. I have an idea of how to accomplish the same in C++, and it's not pleasant -- worker thread, promise/future, blocking queue and CancelSynchronousIO. Cannot even use std::async because CancelSynchronousIO needs a target thread ID. try { int bytesRead = 0; var operationStart = DateTime.Now; var vt = sourceFile.ReadAsync(writeTask.Data); if (vt.IsCompletedSuccessfully) { bytesRead = vt.Result; } else { var t = vt.AsTask(); if (!t.Wait(State.TransferTimeoutSeconds * 1000)) throw new AggregateException(new TimeoutException("Reader timed out.")); bytesRead = t.Result; } writeTask.Data = writeTask.Data.Slice(0, bytesRead); var operationDuration = (DateTime.Now - operationStart); volumeHealthReport.ReadStatistics.UpdateBandwidth(bytesRead, operationDuration); return bytesRead; } catch (AggregateException e) { if (e.InnerException != null) writeTask.ReaderException = e.InnerException; else writeTask.ReaderException = e; volumeHealthReport.ReadStatistics.IncrementErrorCount(); return 0; }