1 /** 2 * Copyright © DiamondMVC 2019 3 * License: MIT (https://github.com/DiamondMVC/Diamond/blob/master/LICENSE) 4 * Author: Jacob Jensen (bausshf) 5 */ 6 module diamond.tasks.delayedtasks; 7 8 import diamond.core.apptype; 9 10 static if (isWeb) 11 { 12 13 public import core.time : Duration, dur, weeks, days, hours, minutes, seconds, 14 msecs, usecs, hnsecs, nsecs; 15 16 import diamond.tasks.core; 17 18 /** 19 * Executes a delayed asynchronous task. 20 * Params: 21 * delay = The time to delay the task. 22 * task = The task to execute. 23 * args = The arguments to pass to the task. 24 */ 25 void delayTask(ARGS...)(Duration delay, void delegate(ARGS) @safe task, auto ref ARGS args) 26 { 27 sleep(delay); 28 29 executeTask(task, args); 30 } 31 32 /** 33 * Executes a delayed asynchronous task. 34 * Params: 35 * delay = The time to delay the task. 36 * task = The task to execute. 37 * args = The arguments to pass to the task. 38 */ 39 void delayTask(ARGS...)(Duration delay, void delegate(ARGS) @system task, auto ref ARGS args) @system 40 { 41 sleep(delay); 42 43 executeTask(task, args); 44 } 45 46 /** 47 * Executes a delayed asynchronous task. 48 * Params: 49 * delay = The time to delay the task. 50 * task = The task to execute. 51 * args = The arguments to pass to the task. 52 */ 53 void delayTask(CALLABLE, ARGS...)(Duration delay, CALLABLE task, auto ref ARGS args) 54 if (!is(CALLABLE : void delegate(ARGS)) && is(typeof(CALLABLE.init(ARGS.init)))) 55 { 56 sleep(delay); 57 58 executeTask(task, args); 59 } 60 }