Group#
-
class Group#
一个用于管理成组实例生命周期的类。
Group 类负责管理成组实例的生命周期,包括它们的创建和销毁。它遵循命运共享原则,即组中的所有实例将一起创建或销毁。
Group 类提供了用于创建、终止和管理成组实例的方法。它确保组中的所有实例被视为一个整体,并且在组创建过程中如果出现任何失败,整个组的操作将回滚。
公共函数
-
Group() = default#
默认构造函数。
-
Group(std::string &name, GroupOptions &opts)#
构造函数。
- 参数:
name - 实例组调度类名称,名称必须是唯一的。
opts - 参见 GroupOptions 结构体。
-
Group(std::string &name, GroupOptions &&opts)#
构造函数。
- 参数:
name - 实例组调度类名称,名称必须是唯一的。
opts - 参见 GroupOptions 结构体。
-
void Invoke()#
按照命运共享原则执行实例组的创建。
此函数用于创建一组共享相同命运的实例。组中的所有实例将一起创建,如果其中一个实例创建失败,整个组将回滚。组的配置和选项定义在结构体 GroupOptions 中。
int main(void) { YR::Config conf; YR::Init(conf); std::string groupName = ""; YR::InvokeOptions opts; opts.groupName = groupName; YR::GroupOptions groupOpts; groupOpts.timeout = 60; auto g = YR::Group(groupName, groupOpts); auto ins1 = YR::Instance(SimpleCaculator::Constructor).Options(opts).Invoke(); auto ins2 = YR::Instance(SimpleCaculator::Constructor).Options(opts).Invoke(); g.Invoke(); return 0; }
Note
限制条件
单个组最多可以创建 256 个实例。
并发创建支持最多 12 个组,每个组最多创建 256 个实例。
在调用 NamedInstance::Export() 之后调用此接口,会导致当前线程挂起。
如果未调用此接口,直接调用有状态函数请求并获取结果,会导致当前线程挂起。
重复调用此接口将导致抛出异常。
组中的实例不支持指定独立生命周期。
- 抛出:
std::runtime_error - 如果在组创建过程中发生错误,或者接口被误用,将抛出此异常。
- 返回:
void。
-
void Terminate()#
终止一组实例。
此函数用于删除或终止一组一起创建的实例。根据命运共享原则,组中的所有实例将作为一个整体被清理或移除。
int main(void) { YR::Config conf; YR::Init(conf); std::string groupName = ""; YR::InvokeOptions opts; opts.groupName = groupName; YR::GroupOptions groupOpts; auto g = YR::Group(groupName, groupOpts); auto ins1 = YR::Instance(SimpleCaculator::Constructor).Options(opts).Invoke(); auto ins2 = YR::Instance(SimpleCaculator::Constructor).Options(opts).Invoke(); g.Invoke(); g.Terminate(); return 0; }
Note
限制条件
此函数只能在已成功创建并调用的组上调用。
并发创建支持最多 12 个组,每个组最多创建 256 个实例。
在调用 NamedInstance::Export() 之后调用此接口,会导致当前线程挂起。
如果未调用此接口,直接调用有状态函数请求并获取结果,会导致当前线程挂起。
重复调用此接口将导致抛出异常。
组中的实例不支持指定独立生命周期。
- 抛出:
std::runtime_error - 如果组不存在、已经被终止,或者在终止过程中发生错误,将抛出异常。
- 返回:
void。
-
void Wait()#
等待成组实例的创建和执行完成。
此函数会阻塞当前进程,直到组中的所有实例完成它们的创建和执行。如果在调用 Wait 之前没有调用 Invoke 方法,将抛出异常。
int main(void) { YR::Config conf; YR::Init(conf); std::string groupName = ""; YR::InvokeOptions opts; opts.groupName = groupName; YR::GroupOptions groupOpts; auto g = YR::Group(groupName, groupOpts); auto ins1 = YR::Instance(SimpleCaculator::Constructor).Options(opts).Invoke(); auto ins2 = YR::Instance(SimpleCaculator::Constructor).Options(opts).Invoke(); g.Invoke(); g.Wait(); // Wait for all instances in the group to complete return 0; }
- 抛出:
Exception- 如果在调用 Wait 之前未调用 Invoke 方法,或者等待操作超时,则会抛出异常。超时时间在 GroupOptions 结构体中指定。- 返回:
void。
-
std::string GetGroupName() const#
获取组的名称。
- 返回:
组的名称。
-
Group() = default#
参数结构补充说明如下: