public static Task <OperationResult> BranchWhenAsync(this OperationResult prevOperationResult, Predicate condition, AsyncAction branchAction)
 => condition.AssertNotNull(nameof(condition))
 .Invoke()
         ? prevOperationResult
 .BranchAsync(branchAction)
         : Task.FromResult(prevOperationResult);
 public static Task <OperationResult> BranchWhenAsync(this OperationResult prevOperationResult, bool condition, AsyncAction <OperationResult> branchAction)
 => condition
         ? prevOperationResult
 .BranchAsync(branchAction)
         : Task.FromResult(prevOperationResult);
 public static Task <OperationResult <T> > BranchWhenAsync <T>(this OperationResult <T> prevOperationResult, Predicate <OperationResult <T> > condition, AsyncAction <OperationResult <T> > branchAction)
 => condition.AssertNotNull(nameof(condition))
 .Invoke(prevOperationResult.AssertNotNull(nameof(prevOperationResult)))
         ? prevOperationResult
 .BranchAsync(branchAction)
         : Task.FromResult(prevOperationResult);
 public static async Task <OperationResult <T> > BranchWhenAsync <T>(this OperationResult <T> prevOperationResult, AsyncPredicate <OperationResult <T> > condition, AsyncAction <OperationResult <T> > branchAction)
 => await condition.AssertNotNull(nameof(condition))
 .Invoke(prevOperationResult.AssertNotNull(nameof(prevOperationResult)))
         ? await prevOperationResult
 .BranchAsync(branchAction)
         : prevOperationResult;
 public static async Task <OperationResult> BranchWhenAsync(this OperationResult prevOperationResult, AsyncPredicate condition, AsyncAction branchAction)
 => await condition.AssertNotNull(nameof(condition))
 .Invoke()
         ? await prevOperationResult
 .BranchAsync(branchAction)
         : prevOperationResult;