延遲非同步示例
此程式碼實現了 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;
}