如何在C++中创建异步/等待代码

How to create async/await code in C++?

本文关键字:异步 等待 代码 创建 C++      更新时间:2023-10-16

我正在使用网络服务的远程RPC,我不想在我的代码中创建任何绑定其他东西的委托。我想写伪异步代码。类似这样的东西:

 await (MyServer->RemoteMethod(parameter_1, parameter_2), 
      [=] (int32 return_value_1, int32 return_value_2) {
           UE_LOG(MyLog, Log, TEXT("RemoteMethod called with result %i %i"), return_value_1, return_value_2);
      });

我不太擅长最新C++版本的函数式编程。但我知道有类似std::function的东西。这能帮我吗?

我还需要代码必须是跨平台的。

您所描述的不是async-await,有了它,您就可以编写:

std::pair<int32, int32> return_values = await MyServer->RemoteMethod(parameter_1, parameter_2);
UE_LOG(MyLog, Log, TEXT("RemoteMethod called with result %i %i"), return_values.first, return_values.second);

我相信这个特性计划在未来的C++版本中出现。

您所描述的是延续,您可以使用boost::future

boost::future<std::pair<int32, int32>> return_values_future = MyServer->RemoteMethod(parameter_1, parameter_2);
return_values_future.then([=](boost::future<std::pair<int32, int32>> fut) {
    UE_LOG(MyLog, Log, TEXT("RemoteMethod called with result %i %i"), fut.get().first, fut.get().second);
});