异步代理

异步代理(或只称作代理)是以异步方式与其他代理一起解决更大的计算任务的应用程序组件。 将代理看作具有设定的生命周期的任务。 例如,一个代理可能会从输入/输出设备(如键盘、磁盘上的文件或网络连接)中读取数据,另一个代理可能会在数据变得可用时对该数据执行操作。 第一个代理通过消息传递来通知第二个代理有更多数据可用。 并发运行时任务计划程序提供了一个高效的机制,使代理能够以协作方式进行阻止和退出,而无需进行效率低下的抢占。

代理库定义了 concurrency::agent 类,用于表示异步代理。 agent是一个抽象类声明的虚拟方法的 concurrency::agent::run run 方法执行代理所执行的任务。 由于run 是抽象的,所以您必须在从 agent 派生的每个类中实现此方法。

代理具有设定的生命周期。 Concurrency::agent_status 枚举定义的代理程序的各种状态。 下图是一个状态图,它演示了代理如何从一种状态进入另一种状态。 在此图中,实线表示您从应用程序调用的方法;虚线表示从运行时调用的方法。

代理状态图

下表描述了 agent_status 枚举中的每种状态。

代理状态

说明

agent_created

尚未计划代理的执行。

agent_runnable

运行时正在计划代理的执行。

agent_started

代理已启动并正在运行。

agent_done

代理已完成。

agent_canceled

代理在进入 started 状态之前已被取消。

agent_created 是代理的初始状态,agent_runnable 和 agent_started 是活动状态,agent_done 和 agent_canceled 是最终状态。

使用 concurrency::agent::status 方法来检索当前状态的agent对象。 尽管 status 方法是并发安全方法,但是当 status 方法返回时,代理的状态可能会发生变化。 例如,调用 status 方法时代理可能处于 agent_started 状态,但是,在 status 方法返回后,代理可能会进入 agent_done 状态。

下表显示了属于 agent 类的某些重要方法。 有关所有 agent 类方法的更多信息,请参见 agent 类

方法

说明

start

计划 agent 对象的执行,并将它设置为 agent_runnable 状态。

run

执行要由 agent 对象执行的任务。

done

使代理进入 agent_done 状态。

取消

如果代理未启动,则此方法将取消执行代理,并将代理设置为 agent_canceled 状态。

status

检索 agent 对象的当前状态。

wait

等待 agent 对象进入 agent_done 或 agent_canceled 状态。

wait_for_all

等待所有提供的 agent 对象进入 agent_done 或 agent_canceled 状态。

wait_for_one

等待至少一个提供的 agent 对象进入 agent_done 或 agent_canceled 状态。

创建代理对象后,调用 concurrency::agent::start 以安排执行的方法。 运行时在计划代理之后调用 run 方法,并将代理设置为 agent_runnable 状态。

运行时不会管理异步代理引发的异常。 有关异常处理和代理的更多信息,请参见并发运行时中的异常处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值