/// <summary> /// First creates promise and wraps it with a taskResultHandle. /// Then starts to listen for promise to resolve. /// Then enqueues task for a worker to execute task and resolve the promise. /// </summary> /// <param name="dotqApi"></param> /// <param name="task"></param> /// <typeparam name="TIn"></typeparam> /// <typeparam name="TOut"></typeparam> /// <returns></returns> public static ITaskResultHandle <TOut> Delay <TIn, TOut>(this DotqApi dotqApi, DotTask <TIn, TOut> task) // this method is written as extension method since I do not want DotqApi to be a generic class. It should be concrete { var handle = new PromiseTaskResultHandle <TOut>(task); handle.Listen(dotqApi._redisPromiseClient); dotqApi._taskQueue.Enqueue(task); return(handle); }
public static ITaskResultHandle <TOut> Delay2 <TOut, TIn>(this DotqApi dotqApi, DotTask <TIn, TOut> task) { dotqApi._taskQueue.Enqueue(task); return(new PromiseTaskResultHandle <TOut>(task, dotqApi._redis)); }
public static PromiseTaskResultHandle <TOut> DelayHandle <TOut>(this DotqApi dotqApi, PromiseTaskResultHandle <TOut> handle) { handle.Listen(dotqApi._redisPromiseClient); handle.Queue(dotqApi._taskQueue); return(handle); }
public static PromiseTaskResultHandle <TOut> Build <TIn, TOut>(this DotqApi dotqApi, DotTask <TIn, TOut> task, Action <TOut> onResolve = null) { var handle = new PromiseTaskResultHandle <TOut>(task, onResolve); return(handle); }