public static Task Start(ProcessTaskStartInfo startInfo, Func <Process, Task> setup) => Start(startInfo.ToProcessStartInfo(), setup, Id);
public static Task <ProcessTaskResult> Start(ProcessTaskStartInfo startInfo, Func <StreamWriter, Task> writeInput) => Start(startInfo.ToProcessStartInfo(), x => DefaultProcessTaskState.Create(x, writeInput), DefaultProcessTaskState.GetResult);
public static Task <TResult> Start <TState, TResult>(ProcessTaskStartInfo startInfo, Func <Process, TState> setup, Func <TState, Task <TResult> > getResult) => Start(startInfo.ToProcessStartInfo(), setup, getResult);
public static Task <ProcessTaskResult> Start(ProcessTaskStartInfo startInfo) => Start(startInfo.ToProcessStartInfo(), DefaultProcessTaskState.Create, DefaultProcessTaskState.GetResult);