Высокий уровень
Я хочу вызвать некоторые функции без возвращаемого значения в асинхронном режиме, не дожидаясь их завершения. Если я использую std:: async, будущий объект не разрушает, пока задача не закончится, это сделает вызов несинхронизирующим в моем случае.
Пример
void sendMail(const std::string& address, const std::string& message)
{
//sending the e-mail which takes some time...
}
myResonseType processRequest(args...)
{
//Do some processing and valuate the address and the message...
//Sending the e-mail async
auto f = std::async(std::launch::async, sendMail, address, message);
//returning the response ASAP to the client
return myResponseType;
} //<-- I'm stuck here until the async call finish to allow f to be destructed.
// gaining no benefit from the async call.
Мои вопросы
- Есть ли способ преодолеть это ограничение?
- if (1) is no, следует ли реализовать один раз поток, который будет принимать эти фьючерсы "зомби" и ждать на них?
- Является ли (1) и (2) нет, есть ли другой вариант, тогда просто создайте собственный пул потоков?
Примечание:
Я предпочитаю не использовать опцию thread + detach (предложенную @galop1n), так как при создании нового потока есть накладные расходы, которых я хочу избежать. При использовании std:: async (по крайней мере, на MSVC) используется пул внутренних потоков.
Спасибо.