Standardbibliotheksimplementierung der Gocron-Funktion (testbar)

王林
Freigeben: 2024-02-15 12:51:08
nach vorne
1048 Leute haben es durchsucht

Standardbibliotheksimplementierung der Gocron-Funktion (testbar)

Der PHP-Editor Baicao stellt Ihnen eine Funktion namens Gocron vor, die eine Standardbibliotheksimplementierung ist und über testbare Funktionen verfügt. Die Gocron-Funktion soll eine einfache Möglichkeit bieten, geplante Aufgaben zu erstellen und zu verwalten. Es kann Entwicklern dabei helfen, mehrere geplante Aufgaben einfach zu schreiben und zu planen, und bietet außerdem flexible Testfunktionen, um Entwicklern die Durchführung von Komponententests und Funktionsüberprüfungen zu erleichtern. Ob in einer Entwicklungsumgebung oder einer Produktionsumgebung, die Gocron-Funktion ist ein leistungsstarkes und zuverlässiges Tool, mit dem verschiedene komplexe Anforderungen an Timing-Aufgaben umgesetzt werden können.

Frageninhalt

Ich muss in bestimmten Abständen einen Job ausführen (den Rest-Endpunkt erreichen und dann eine Nachricht an die Warteschlange senden). Derzeit habe ich diese Funktion, die Gocron verwendet – https://github.com/go-co-op/gocron

Aber es gibt derzeit keinen Mechanismus, um diese Funktion zu stoppen, daher kann ich sie nicht sauber testen.

func RunSchedule(cronExpression string, myFunction func()) error {
    scheduler := gocron.NewScheduler(time.UTC)
    _, err := scheduler.Cron(cronExpression).StartImmediately().Do(myFunction)
    if err != nil {
        return err
    }
    scheduler.StartBlocking()
    return nil
}
Nach dem Login kopieren

Es tut, was verlangt wird, und führt die parametrisierte Funktion in den erforderlichen Intervallen aus, aber ich bin mir sicher, dass es eine sauberere Lösung geben muss – wahrscheinlich die Standardbibliothek.

Problemumgehung

Sie können einfach die .stop-Funktion zurückgeben:

func runschedule(cronexpression string, myfunction func()) (stop func(), err error) {
    scheduler := gocron.newscheduler(time.utc)
    _, err = scheduler.cron(cronexpression).startimmediately().do(myfunction)
    if err != nil {
        return nil, err
    }
    go func() {
        scheduler.startblocking()
    }()

    return scheduler.stop, nil
}
Nach dem Login kopieren

Dann können Sie in Ihrem Test Folgendes tun:

called := 0
stop, err := RunSchedule("some-schedule", func() {
    called++
})
time.Sleep(time.Second * 1) // whatever you need to do 
stop()
if called != 1 {
    t.Fail("called should be 1")
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonStandardbibliotheksimplementierung der Gocron-Funktion (testbar). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage