stdpackaged 任務和 stdfuture

std::packaged_task 繫結一個函式及其返回型別的相關承諾:

template<typename F>
auto async_deferred(F&& func) -> std::future<decltype(func())>
{
    auto task   = std::packaged_task<decltype(func())()>(std::forward<F>(func));
    auto future = task.get_future();

    std::thread(std::move(task)).detach();

    return std::move(future);
}

執行緒立即開始執行。我們可以將其分離,或者在範圍的最後加入它。當函式呼叫 std::thread 完成時,結果就緒。

請注意,這與 std::async 略有不同,其中被破壞時返回的 std::future 實際上會阻塞直到執行緒完成。