我需要在第一次使用前通過調用StateManager.GetOrAddAsync來「初始化」集合嗎?
是的,但你不必這樣做「熱身」收集。如果您確實需要檢索某些數據或想要存儲某些內容,請調用該方法。
如果通過遠程調用方法在集合被初始化之前調用,該怎麼辦?
這就是爲什麼你需要在每次打電話給服務時都要做StateManager.GetOrAddAsync
。
是否有將是任何性能惡化,首先遠程調用
是。但它會不明顯。
與可靠的集工作,如果是OK的
類來保存參考收集
你可以抓住一個方法調用中的變量集合的引用。這裏是一個例子:
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;
}
}
謝謝你的回答! 「保持引用與調用GetOrAddAsync」稍有不同: 場景:圍繞可靠收集的包裝類。類方法創建事務,存儲/檢索數據和提交事務。 在創建事務和使用集合之前,在包裝器初始化/構造中獲取對集合的引用是足夠的還是應該在每個方法中調用GetOrAddAsync? 你是否在每個AddPost/RetrievePost之前獲得狀態? – ElDiabloComputatore
在創建事務和使用集合之前,您應該在每種方法中調用'GetOrAddAsync'。那麼,當然你可以將它存儲在一個變量中,但我不確定它會起作用,例如,當同時調用多個服務的方法時。可能它會工作,但我不會推薦這種方法。所以,是的,你需要在每個服務的方法調用中創建它。畢竟,爲什麼不呢?與其他操作相比,它比較便宜。我在每次調用AddPost時都會得到狀態,就在方法本身內部。 – cassandrad