您好!欢迎光临工博士商城

软银PEPPER机器人服务商

产品:9    

咨询热线:18621383650

QQ QQ
您当前的位置:首页 » 新闻中心 » 链式操作同步异步教程——pepper机器人
产品分类
新闻中心
链式操作同步异步教程——pepper机器人
发布时间:2020-05-09        浏览次数:367        返回列表
链式操作同步异步教程——pepper机器人

链式操作
同步或异步

要同步链操作,通常一个接一个地编写语句,使用前面语句的结果来执行新语句:

// Build an animate action.
Animate animate = ...;
// Run the animate action synchronously.
animate.run();
// Build a listen action.
Listen listen = ...;
// Run the listen action synchronously.
listen.run();

在这里,我们运行一个 Animate 然后运行 Listen,此时均是同步的方式

这些操作也可以异步执行:

// Run the animate action asynchronously.
animate.async().run();
// Run the listen action asynchronously.
listen.async().run();

这些代码段执行异步操作,但它们没有链在一起:两个actions都将同时启动.

我们想要的是在个操作提供返回结果时执行第二个操作(这里是当动animation结束后listen).我们将在下面看到如何异步链接这些操作.

Futures
什么是一个 future

Future 包装异步操作的对象.

它允许您在顺序方式编写代码时执行异步操作.

Future 类主要是用于异步执行以下操作:

创建actions和资源等对象,
处理action执行(结果,取消和错误),
链一些action执行资源创建.
future的状态

一个Future 有3种状态:它可以提供结果,可以取消或者失败。这些状态对应于wrapped操作的不同*终状态.

如果一个wrapped操作:

返回一个值,Future 将在可用时提供此值,
被取消, Future将会被取消,
遇到错误, Future 将会失败.
Future是一个通用类, 这里的 T 是他能提供的值的类型. 比如 Future 能提供一个String 类型的值.

链式操作同步异步教程——pepper机器人
 
软银机器人+NAO

注意

如果wrapped的操作没有返回任何东西,那么future的类型就是 Future. 在这种情况下,如果操作成功Future则将以结果状态结束.

Future 类提供的get方法可以同步访问Future的值:

Future stringFuture = ...;
String value = stringFuture.get(); // Synchronous call to get the value.

调用get方法会阻塞当前线程:此调用是同步的.

提醒

同步调用Pepper机器人会阻塞,而异步调用则立即返回值.

如果在wrapped作中发生错误,get 调用将抛出一个 ExecutionException 如果操作被取消,则get 调用将抛出一个CancellationException.

使用一个try-catch 来确定Future 完成的状态:

Future stringFuture = ...;
try {
String value = stringFuture.get();
// The future finished with value.
} catch (ExecutionException e) {
// The future finished with error.
} catch (CancellationException e) {
// The future was cancelled.
}

更多资讯:  互动机器人     人机交互


 

联系热线:18621383650   联系人:陈诗洁 联系地址:上海市宝山区富联一路98弄6号

技术和报价服务:星期一至星期六8:00-22:00 软银PEPPER机器人服务商