我的代码如下:
Future<ISomeClass*> Func1(
bool someCondition,
const InfoObj* info,
pVerify ...
) noexcept
{
if (someCondition)
{
const_cast<OneAuthIdentity*> (info)->GetTicketAsync()
.Then([info, pVerify](TicketResult result) noexcept
{
pVerify->CheckExistence(
info,
[](const CustomObj& result) noexcept
{
if (result.GetAccount())
{
cout<<"Get acct is true";
}
else
{
cout<<"Get acct is false";
}
});
});
}
return promise.AsFuture();
}
此处GetTicketAsync()是一个异步函数,并返回一个Future。在GetTicketAsync()的.then()内部,我正在调用void CheckExistence(),后者将继续调用异步函数。
问题:
在GetTicketAsync()的.then()内部,调用CheckExistence之后程序会冻结,并且控制永远不会返回其lambda函数。
如果我将CheckExistence从GetTicketAsync()中移出,它将很好地工作。我观察到的一件事是,即使在CheckExistence被调用之前,promise也会从Func1返回。与冻结程序有什么关系吗?