Qt 如何确保QNetworkReply::finished确实被捕获

Qt 如何确保QNetworkReply::finished确实被捕获,qt,qnetworkreply,Qt,Qnetworkreply,当我有这样的代码时: QNetworkReply* reply = netWorkMansger.post(...); connect(reply,&QNetworkReply::finished,[=](){//Handler code}); 如果在第一行和第二行之间,回复完成了怎么办?如果应答在创建过程中发出finished(),那么在应答指针返回给post()的调用方之前,connect()确实太晚了 QNetworkReply/QNetworkAccessManager不这样做

当我有这样的代码时:

QNetworkReply* reply = netWorkMansger.post(...);
connect(reply,&QNetworkReply::finished,[=](){//Handler code});
如果在第一行和第二行之间,回复完成了怎么办?如果应答在创建过程中发出finished(),那么在应答指针返回给post()的调用方之前,connect()确实太晚了

QNetworkReply/QNetworkAccessManager不这样做,回复的网络操作的开始在事件循环中,即,在代码返回到事件循环或以其他方式处理事件之前,操作不会开始(否则意味着显式调用一些讨厌的方法之一,如QDialog::exec()/QMessageBox::critical等、QEventLoop::exec()或processEvents()。因此,如果您立即连接到回复,那么您的代码是安全的

在我看来,在异步操作启动时不同步发出finished()这样的信号是实现此类操作时最重要的规则之一