0

Ich spawne mehrere ASF-Microservices, um einen Prozess auszuführen. Sobald der Prozess abgeschlossen ist, lösche ich diese Dienste mit DeleteServiceAsync mit folgendem Code. Fast 98% der Zeit läuft alles gut. In 2% der Fälle kam es jedoch zu einem Timeout-Problem, und die Microservices blieben beim Löschen des Status mit dem sekundären sekundären Replikat stecken. Vielen Dank im Voraus für Vorschläge zur Lösung dieses Problems.Service Fabric - DeleteServiceAsync Zeitüberschreitung

using (FabricClient fc = new FabricClient()) 
{ 
    fc.ServiceManager.DeleteServiceAsync(deleteServiceDescription, TimeSpan.FromMinutes(5), cancellationToken); 
} 
+1

Haben Sie einen Code-Pfad in RunAsync, der eine lange Zeit dauern kann und nicht regelmäßig den cancellationtoken überprüft? – LoekD

+1

Das an RunAsync übergebene cancellationtoken wird nicht verwendet. RunAsync startet eine andere Aufgabe, die lange dauern könnte. Muss ich dieses Abbruch-Token an eine neue Aufgabe übergeben, die ich innerhalb von RunAsync starte, so dass alle Aufgaben beendet werden können, wenn eine Stornierung angefordert wird? – antar

+1

Ja, übergeben Sie es der Operation und überprüfen Sie es. – LoekD

Antwort

1

Nun, könnten Sie die säumigen Repliken mit so etwas wie dem zu this question bereitgestellte Lösung erzwingen fallen, aber das ist in der Regel eine schlechte Idee, und nicht in der Produktion getan werden soll.

Dieser festgefahrene Status zeigt normalerweise an, dass der Dienst ein Problem mit dem Herunterfahren hat. Haben Sie das lokal getestet? Einfach den Dienst in einer Schleife erstellen und löschen, bis er passiert, sollte ausreichen, um Ihnen zu zeigen, wo er sich befindet.