使用新Guid获取Orleans Grain实例的创建与垃圾回收疑问
Orleans Grain 相关问题解答
问题1:由于Key唯一,每次都会创建新的Grain类实例吗?
是的,每次通过var grain = grainFactory.GetGrain<IExample>(Guid.NewGuid());获取Grain时,因为传入的是唯一Guid作为Grain Key,Orleans会创建全新的Grain实例。Orleans中Grain的身份由「Grain类型 + 唯一Key」共同确定,只要Key不同,就会被视为完全独立的实体,不会复用已存在的Grain实例。
问题2:如果客户端不等待Grain方法执行完成,该Grain类实例会在一段时间闲置后被垃圾回收吗?
会的。Orleans内置闲置Grain回收机制:
- 不管客户端是否等待Grain方法执行完毕,只要该Grain在配置的闲置时长内没有收到新的请求,Orleans运行时就会将其从内存中卸载。
- 需要注意:客户端不等待异步操作,并不会中断Grain内部的异步任务——任务会继续执行完成,直到Grain进入完全闲置状态后,才会触发后续的CLR垃圾回收流程。
内容的提问来源于stack exchange,提问作者Matthew MacFarland
相关产品推荐
相关产品推荐

