private static TaskCompletionSource <T> Create <T>(SourceOrign origin) { switch (origin) { case SourceOrign.NewTCS: return(new TaskCompletionSource <T>()); case SourceOrign.Create: return(TaskSource.Create <T>(null)); default: throw new ArgumentOutOfRangeException(nameof(origin)); } }