code: func New(taskFunc interface{}, args []Arg) (*Task, error) {
  	task := &Task{
  		TaskFunc: reflect.ValueOf(taskFunc),
  		Context:  context.Background(),
  	}
  
  	taskFuncType := reflect.TypeOf(taskFunc)
  	if taskFuncType.NumIn() > 0 {
  		arg0Type := taskFuncType.In(0)
  		if IsContextType(arg0Type) {
  			task.UseContext = true
  		}
  	}
  
  	if err := task.ReflectArgs(args); err != nil {
  		return nil, fmt.Errorf("Reflect task args error: %s", err)
  	}
  
  	return task, nil
  }
docs: // New tries to use reflection to convert the function and arguments
  // into a reflect.Value and prepare it for invocation