Service Fabric Actor状态像队列一样

时间:2016-07-14 16:44:50

标签: c# azure-service-fabric

我有一个看起来像这样的Actor方法:

ConditionalValue<Command> result = await this.StateManager.TryGetStateAsync<Command>(key);

await this.StateManager.TryRemoveStateAsync(key);    

return result.Value;

当我从ActorMethod返回或调用this.SaveStateAsync()时,它抛出以下异常:

System.Fabric.FabricException: The given key was not present. ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80071C13 at System.Fabric.Interop.NativeRuntime.IFabricKeyValueStoreReplica6.Remove

1 个答案:

答案 0 :(得分:2)

我花了整整一天的时间然后把它想出来了。

在同一个actor的另一个方法中,我们将在其他方法调用中删除的项排入队列。

通过查看StateManager,我可以看到该值的CheckStatus为Add,所以我将follow调用添加到了enqueue方法

await this.SaveStateAsync();

然后排队然后没有任何问题。

这可能是一个边缘案例,但不要在一种方法中添加,在另一种方法中执行检索和删除,而不在其间保存状态。

提醒我一点EF背景。