在另一个同步函数中执行异步函数会冻结程序

时间:2020-07-19 17:35:43

标签: c++ asynchronous lambda concurrency promise

我的代码如下:

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返回。与冻结程序有什么关系吗?

0 个答案:

没有答案