我是否需要在第一次使用之前“初始化”集合(通过调用 StateManager.GetOrAddAsync)?
是的,但您不必这样做来“热身”收集。如果您确实需要检索一些数据或想要存储一些东西,请调用该方法。
如果在集合初始化之前调用通过远程调用的方法怎么办?
这就是为什么您需要StateManager.GetOrAddAsync
在每次调用服务时都执行此操作。
第一次远程调用的性能是否会下降
是的。但这将是不明显的。
当使用可靠的集合时,可以在类中保存对集合的引用
您可以在方法调用中的变量中保存对集合的引用。这是一个例子:
public async Task AddPost(Guid userId, PostId postId)
{
try
{
var state = await StateManager.GetOrAddAsync<IReliableDictionary<Guid, List<PostId>>>(StateName);
using (var tx = StateManager.CreateTransaction())
{
await state.AddOrUpdateAsync(
tx,
userId,
addValue: new List<PostId> {postId},
updateValueFactory: (usrId, oldPostsList) =>
{
oldPostsList.Insert(0, postId);
return oldPostsList;
}
);
await tx.CommitAsync();
}
}
catch (TimeoutException)
{
PostsLogger.Singleton.LogWarning("Add post timeout");
throw;
}
catch (Exception ex)
{
PostsLogger.Singleton.LogException(sb.ToString(), ex);
throw;
}
}