2016-07-14 4 views
3

ich eine Schauspieler-Methode habe, die wie folgt aussieht:Service-Fabric Schauspieler Staat Actiing Wie eine Queue

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

await this.StateManager.TryRemoveStateAsync(key);  

return result.Value; 

Als ich aus dem ActorMethod zurückzukehren oder rufen Sie this.SaveStateAsync(), wirft es mit folgenden Ausnahme:

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

+0

Können Sie den gesamten Stack-Trace anzeigen? –

Antwort

2

Den ganzen Tag verbrachte ich damit und dann habe ich es herausgefunden.

In einer anderen Methode des gleichen Akteurs werden wir das Element in die Warteschlange stellen, das in dem anderen Methodenaufruf gelöscht wird.

Mit am State suchen konnte ich sehen, dass der Wert ein check von Add hatte, so dass ich hinzugefügt, um die Folge Anruf in die Enqueue Methode

await this.SaveStateAsync(); 

und die de-Warteschlange arbeitete dann ohne Probleme.

Es ist wahrscheinlich ein Edge-Fall, aber nicht eine Add in one-Methode, eine abrufen und löschen in einer anderen Methode, ohne dazwischen Zustand zu speichern.

Erinnert mich ein bisschen EF Kontext.

Verwandte Themen