subprojects/parseq/src/main/java/com/linkedin/parseq/Tasks.java
private static <T> ParTask<T> vapar(final Task<?>... tasks) {
    final List<Task<T>> taskList = new ArrayList<Task<T>>(tasks.length);
    for (Task<?> task : tasks) {
      @SuppressWarnings("unchecked")
      final Task<T> typedTask = (Task<T>) task;
      taskList.add(typedTask);
    }
    return par(taskList);
  }
private static <T> ParTask<T> vapar(final Task<?>... tasks) {
    final List<Task<T>> taskList = new ArrayList<Task<T>>(tasks.length);
    for (Task<?> task : tasks) {
      @SuppressWarnings("unchecked")
      final Task<T> typedTask = (Task<T>) task;
      taskList.add(typedTask);
    }
    return par(taskList);
  }
Creates a new task that will run each of the supplied tasks in parallel (e.g.
tasks[0] can be run at the same time as task2). <strong>This method is not
type-safe</strong> - prefer one of the {@code par} options when possible.
<p>
When all tasks complete successfully, you can use
{@link com.linkedin.parseq.ParTask#get()} to get a list of the results. If
at least one task failed, then this task will also be marked as failed. Use
{@link com.linkedin.parseq.ParTask#getTasks()} or
{@link com.linkedin.parseq.ParTask#getSuccessful()} to get results in this
case.

@param tasks the tasks to run in parallel
@return a new task that will run the given tasks in parallel