2017-10-18 2 views
1

Im Service Fabric-Cluster habe ich einen zustandslosen Dienst, der in der RunAsync-Methode kontinuierlich eine (echte) Schleife ausführt. Aufgrund dieser while-Schleife finde ich es schwierig, die Anwendung aus dem Cluster zu löschen. Der Fehler tritt jedes Mal auf, wenn ich versuche, den Vorgang zu löschen, indem ich den Status nicht löste. Normalerweise versuche ich, die Anwendung einmal zu implementieren, um den Code zu entfernen. Um den Code über der Anwendung neu zu implementieren, muss ich zweimal bereitstellen. Gibt es eine Arbeit, ohne die unendliche While-Schleife zu entfernen?Fehler beim Löschen des zustandslosen Diensts im Service Fabric-Cluster

Aktualisiert: Runasync Methode

protected override async Task RunAsync(CancellationToken cancellationToken) 
    { 
     //making sure the thread is active 
     while (true) 
     { 
      do something; 
     } 

    } 

Vielen Dank für die Eingabe.

+0

Können Sie Ihre RunAsync Methode hinzufügen hier zum besseren Verständnis? –

+0

Ich habe die Runasync-Methode hinzugefügt. – user3530857

Antwort

2

Während des Herunterfahrens wird das an RunAsync übergebene Abbruch-Token abgebrochen. Sie müssen die IsCancellationRequested-Eigenschaft des Abbruch-Tokens in Ihrer Hauptschleife überprüfen. Wenn dies zutrifft, und wenn es aufgerufen wird, löst die ThrowIfCancellationRequested-Methode des Tokens eine OperationCanceledException aus.

Wenn Ihr Dienst in angemessener Zeit nicht auf diese API-Aufrufe reagiert, kann Service Fabric Ihren Dienst zwangsweise beenden. In der Regel geschieht dies nur während Anwendungsaktualisierungen oder wenn ein Dienst gelöscht wird. Dieser Timeout beträgt standardmäßig 15 Minuten.

Sehen Sie dieses Dokument für eine gute Referenz: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-lifecycle#stateless-service-shutdown

Verwandte Themen