2013-04-06 18 views
5

Sto guardando la freccia dal punto di vista laterale del server.Dart ha uno scheduler?

Esiste un pianificatore in grado di eseguire isolati in un momento specifico o X volte all'ora? Sto pensando alle linee di Quartz nel mondo di Java.

risposta

10

Dart ha alcune opzioni per le attività in ritardo e si ripetono, ma io non sono a conoscenza di un porto di quarzo per Dart (ancora ... :)

Qui sono i principi fondamentali:

  • Timer - basta eseguire una funzione con un certo ritardo
  • Future - più robusto, componibile, le funzioni che restituiscono i valori "in futuro"
  • Stream - robusti, ruscelli componibili di eventi. Può essere periodico

Se si dispone di un'attività ricorrente, si consiglia di utilizzare Stream over Timer. Il timer non ha la gestione degli errori integrata, quindi le eccezioni non rilevate possono far cadere l'intero programma (Dart non ha un gestore di errori globale).

Ecco come si utilizza un Stream per produrre risultati periodici:

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 
    }); 
} 

È specificamente chiedere di isolati. È possibile generare un isolato all'avvio del programma e inviarlo un messaggio ogni ora. Oppure, è possibile generare l'isolato all'avvio del programma e l'isola stessa può eseguire il proprio timer o flusso periodico.