Hãy xem xét tôi có lamba foo
mà chỉ cần làm một số công cụ và không cần phải trả lại bất cứ điều gì. Khi tôi làm điều này:std :: async sẽ không sinh ra một chủ đề mới khi giá trị trả về không được lưu trữ
std::future<T> handle = std::async(std::launch::async, foo, arg1, arg2);
Mọi thứ đều chạy tốt và lamba sẽ được sinh ra trong một chuỗi mới. Tuy nhiên, khi tôi không lưu trữ std::future
mà trả về std::async
, thì foo sẽ được chạy trong chuỗi chính và chặn nó.
std::async(std::launch::async, foo, arg1, arg2);
Tôi thiếu gì ở đây?
Có lẽ '' 'future''' được trả về bởi' '' async''' bị hủy ngay lập tức. Tôi sẽ không ngạc nhiên nếu destructor của '' 'future''' có một sự chờ đợi tiềm ẩn bên trong. –