是否可以不等待线程函数的返回值?比如稍后检查值是否返回并在执行该函数时执行其他操作?我的意思是,如果你必须等待函数返回,它并不是真正的多线程,因为你可以直接调用该函数。
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("myusername@gmail.com", "mypassword"),
EnableSsl = true
};
client.Send("myusername@gmail.com", "myusername@gmail.com", "test", "testbody");
Console.WriteLine("Sent");
Console.ReadLine();
答案 0 :(得分:2)
您可以通过在零超时调用future::wait_for
并检查返回值是否等于future_status::ready
来检查未来是否准备就绪。
顺便说一句:std::async
返回特殊期货,您应该考虑是否真的想要使用它。更详细的信息:http://scottmeyers.blogspot.com/2013/03/stdfutures-from-stdasync-arent-special.html
答案 1 :(得分:2)
您立即请求结果而不是做其他事情,然后在需要时获得结果。如果你这样做:
int main()
{
auto future = std::async(func_1, 2);
//More code later
int number = future.get(); //Whole program waits for this
// Do something with number
return 0;
}
然后您可以在More code later
位中执行其他操作,然后在需要调用get()
的结果时阻止。
或者,您可以使用wait_for或wait_until查看该值是否可用,并在结果尚未就绪时执行某些操作。