
上QQ阅读APP看书,第一时间看更新
2.2 Grain的服务模型
2.2.1 服务接口与实现
在Actor模型中,每个Actor实例通过服务接口对外发布功能,因此在Orleans内实现Grain服务时,开发人员应当首先定义每个Grain类型所提供的服务接口,以此作为服务调用过程中Grain实例与调用方间的服务契约(Service Contract)。
在Orleans内的所有Grain服务接口方法都为异步方法,这是由于Orleans运行时是通过异步消息传递的方式实现对Grain实例的服务调用的。因此,Grain服务接口中所有方式的返回值类型都应被声明为Task(对应同步场景下的无返回值函数)或Task<T> /ValueTask<T>(对应同步场景下返回值类型为T的函数)。以下代码为一个Grain服务接口的声明示例:

Grain服务接口的实现逻辑通常被定义在Grain类型内,开发人员可以使用async/await关键字对服务流程中异步逻辑的实现进行简化。例如,以下代码在EchoTalkerGrain类型中实现了ITalker服务接口的处理逻辑:

