Orleans 2.0 官方文档 —— 5.5.11 集群和客户端 -> 配置指南 -> 启动任务

启动任务

在许多情况下,一旦silo可用,就需要自动执行某些任务。启动任务提供此功能。

一些用例包括但不限于:

  • 启动后台计时器,以执行周期性的"家务"式的任务
  • 使用从外部的后备存储下载的数据,预加载一些缓存的grain

启动期间从启动任务抛出的任何异常,都会报告在silo日志中,并停止silo。

这种快速失败的方法是Orleans处理silo启动问题的标准方法,旨在允许在测试阶段,轻松检测到silo的配置和/或引导逻辑的任何问题,而不是被静默忽略,并在以后的silo生命周期中导致意外问题。

配置启动任务

可以使用ISiloHostBuilder注册一个要在启动期间调用的委托,或注册一个IStartupTask的实现,来配置启动任务。

示例:注册一个委托

siloHostBuilder.AddStartupTask(
  async (IServiceProvider services, CancellationToken cancellation) =>
  {
    // Use the service provider to get the grain factory.
    var grainFactory = services.GetRequiredService();

    // Get a reference to a grain and call a method on it.
    var grain = grainFactory.GetGrain(0);
    await grain.Initialize();
});

示例:注册一个IStartupTask的实现

首先,我们必须定义一个IStartupTask的实现:

public class CallGrainStartupTask : IStartupTask
{
    private readonly IGrainFactory grainFactory;

    public CallGrainStartupTask(IGrainFactory grainFactory)
    {
        this.grainFactory = grainFactory;
    }

    public async Task Execute(CancellationToken cancellationToken)
    {
        var grain = this.grainFactory.GetGrain(0);
        await grain.Initialize();
    }
}

然后,必须用ISiloHostBuilder来注册该实现:

siloHostBuilder.AddStartupTask();

你可能感兴趣的:(Orleans)