2013-04-06 15 views
5

Ich betrachte Dart von Server-Seite Sicht.Hat Dart einen Scheduler?

Gibt es einen Scheduler, der Isolate zu einer bestimmten Zeit oder X mal pro Stunde ausführen kann? Ich denke an die Linien von Quarz in der Java-Welt.

Antwort

10

Dart hat ein paar Optionen für die verzögerte und sich wiederholende Aufgaben, aber ich bin nicht von einem Hafen von Quarz bewusst Dart (noch ... :)

Hier sind die Grundlagen:

  • Timer - einfach laufen eine Funktion nach einer gewissen Verzögerung
  • Future - robuster, zusammensetzbare, Funktionen, die Werte „in der Zukunft“
  • Stream zurückkehren - robust, zusammensetzbare Ströme von Veranstaltungen. Kann periodisch sein.

Wenn Sie eine sich wiederholende Aufgabe haben, würde ich empfehlen, Stream over Timer zu verwenden. Timer hat keine integrierte Fehlerbehandlung, so dass nicht abgefangene Exceptions Ihr gesamtes Programm zum Absturz bringen können (Dart hat keinen globalen Fehlerhandler).

Hier ist, wie Sie eine Stream verwenden periodische Ergebnisse zu produzieren:

import 'dart:async'; 

main() { 
    var stream = new Stream.periodic(const Duration(hours: 1), (count) { 
    // do something every hour 
    // return the result of that something 
    }); 

    stream.listen((result) { 
    // listen for the result of the hourly task 
    }); 
} 

Sie speziell über Isolate fragen. Sie können ein Isolat beim Programmstart erzeugen und es stündlich eine Nachricht senden. Oder Sie können das Isolat beim Programmstart erzeugen, und das Isolat selbst kann seinen eigenen Timer oder periodischen Stream ausführen.