问题
I am looking at dart from server side point of view.
Is there a scheduler that can execute isolates at a specific time or X times an hour? I am thinking on the lines of Quartz in the Java world.
回答1:
Dart has a few options for delayed and repeating tasks, but I'm not aware of a port of Quartz to Dart (yet... :)
Here are the basics:
Timer
- simply run a function after some delayFuture
- more robust, composable, functions that return values "in the future"Stream
- robust, composable streams of events. Can be periodic.
If you have a repeating task, I would recommend using Stream over Timer. Timer does not have error handling builtin, so uncaught exceptions can bring down your whole program (Dart does not have a global error handler).
Here's how you use a Stream to produce periodic results:
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
});
}
You specifically ask about isolates. You could spawn an isolate at program start, and send it a message every hour. Or, you can spawn the isolate at program start, and the isolate itself can run its own timer or periodic stream.
来源:https://stackoverflow.com/questions/15848214/does-dart-have-a-scheduler