code: function(task, context, args) {
              // can used to default task
              if (!_.isFunction(task)) {
                  args = task;
                  task = null;
                  context = null;
              }
  
              if (!_.isArray(args)) args = [args];
  
              var d = Q.defer();
              this.tasks.push({
                  "task": task,
                  "args": args || [],
                  "context": context,
                  "result": d
              });
              if (this.empty == true) {
                  this.startNext();
              }
              return d.promise;
          }
docs: /*
  Add tasks
  @task : function task
  @args : args to the task
  @context : context to the task