new object $scheduler: $utilities;
var $root inited = 1;
var $scheduler suspended_tasks = #[];
public method $scheduler.suspend() {
arg @objs;
objs += [user()];
suspended_tasks = dict_add(suspended_tasks, task_id(), objs);
return (> suspend() <);
};
public method $scheduler.resume() {
arg task_id, @return_value;
var objs;
if ((objs = (| suspended_tasks[task_id] |))) {
if (!(sender() in objs))
throw(~perm, sender() + " may not resume task " + task_id);
suspended_tasks = dict_del(suspended_tasks, task_id);
}
return (> resume(task_id, @return_value) <);
};
public method $scheduler.cancel() {
arg task_id;
var objs;
if ((objs = (| suspended_tasks[task_id] |))) {
if (!(sender() in objs))
throw(~perm, sender() + " may not cancel task " + task_id);
suspended_tasks = dict_del(suspended_tasks, task_id);
}
return (> cancel(task_id) <);
};
public method $scheduler.task_info() {
arg @args;
return (> task_info(@args) <);
};