高レベル
非同期モードで戻り値のないいくつかの関数を、関数が終了するのを待たずに呼び出したいと考えています。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.
私の質問は
- この制限を克服する方法はありますか?
- (1) が「いいえ」の場合、これらの「ゾンビ」先物を受け取り、それらを待機するスレッドを一度実装する必要がありますか?
- (1) と (2) はいいえですか? 独自のスレッドプールを構築するだけの他のオプションはありますか?
注:
新しいスレッドの作成には回避したいオーバーヘッドがあるため、thread + detach(@galop1nが推奨)のオプションは使用しません。std::async を使用している間 (少なくとも MSVC では)、内部スレッド プールを使用しています。
ありがとう。