单向请求
Grain 执行异步请求执行,要求所有 grain 接口方法返回异步类型,例如 Task。 等待从 grain 调用返回的任务完成会通知调用方请求已完成,从而允许调用方处理异常或接收返回值。 Orleans 还支持单向请求,使调用方能够通知有关事件的 grain,而无需出现异常或完成信号。
单向请求立即返回给调用方,不发出失败或完成信号。 单向请求甚至不保证被调用方收到该请求。 单向请求的主要优点是,它们可节省与将响应发送回调用方相关的消息传送成本,从而可以在一些特殊化的情况下提高性能。 单向请求是一项高级性能功能,应谨慎使用,并且仅当开发人员已确定单向请求有益时才使用。 建议首选常规双向请求,这些请求会发出完成信号并将错误传播回调用方。
可以使用 OneWayAttribute 来标记 grain 接口方法,从而使请求成为单向请求,如下所示:
public interface IOneWayGrain : IGrainWithGuidKey
{
[OneWay]
Task Notify(MyData data);
}
单向请求必须返回 Task 或 ValueTask,并且不得返回这些类型的通用变体(Task<TResult> 和 ValueTask<TResult>)。