2016-04-12 8 views
0

Der erste Zustand der Statusmaschine wartet auf ein Ereignis. Wenn das Ereignis an bestimmten Tagen nicht eintritt, wechselt die Statusmaschine in den zweiten Status. Wenn das Ereignis in dem Zeitraum stattgefunden hat, wird der Zustandsautomat in den dritten Zustand wechseln.Was ist der beste Weg, um das Ereignis bis zum Ablauf in Golang, Timer oder Gorroutine zu warten?

Ich habe zwei Optionen: 1, Verwenden Sie einen Timer. Richten Sie an bestimmten Tagen einen Timer ein. Wenn die Zeit abgelaufen ist, wird überprüft, ob das Ereignis eingetreten ist oder nicht. Wenn dies passiert ist, wechseln Sie in den dritten Status. Wenn nicht, wechseln Sie in den zweiten Zustand. Es ist möglich, dass in diesem Zeitraum Tausende von Timern erstellt werden.

2, Verwenden Sie eine Schleife mit Routine. Starten Sie eine Routine, um eine Schleife auszuführen. Jede halbe Stunde wird die Goroutine prüfen, ob das Ereignis passiert ist oder nicht. Wenn das Ereignis eingetreten ist, wechseln Sie in den dritten Status. Sonst die Schleife bis zum Ablauf der bestimmten Tage fortsetzen und dann in den zweiten Zustand wechseln.

Meine Frage ist time.Timer vs Goroutine, die mehr für diesen Fall ist?

Antwort

1

Da Sie einen Zeitraum von Tagen angeben, von den beiden angegebenen, sollten Sie wahrscheinlich mit der zweiten Option gehen. Auf diese Weise können Sie den Status in einer Datei (oder Datenbank) speichern und den Prozess bei Bedarf neu starten. Die erste Option macht das Speichern des Zustands schwieriger, aber immer noch möglich.