延遲非同步示例

此程式碼實現了 std::async 的一個版本,但它的行為就像 async 總是使用 deferred 啟動策略呼叫一樣。這個功能也沒有 async 的特殊 future 行為; 返回的 future 可以在沒有獲得其價值的情況下被銷燬。

template<typename F>
auto async_deferred(F&& func) -> std::future<decltype(func())>
{
    using result_type = decltype(func());

    auto promise = std::promise<result_type>();
    auto future  = promise.get_future();

    std::thread(std::bind([=](std::promise<result_type>& promise)
    {
        try
        {
            promise.set_value(func()); 
            // Note: Will not work with std::promise<void>. Needs some meta-template programming which is out of scope for this example.
        }
        catch(...)
        {
            promise.set_exception(std::current_exception());
        }
    }, std::move(promise))).detach();

    return future;
}