Пример #1
0
 public async override Task <LeafNode> BestNodeAsync(Tournament <T> tournament, IAsyncComparator <T> comparator, CancellationToken cancellationToken)
 {
     if (BestCompetitor == null)
     {
         Debug.Assert(tournament.NextWinnerStepsMax > 0);
         Debug.Assert(tournament.NextWinnerStepsMax - tournament.NextWinnerStepsDone > 0);
         cancellationToken.ThrowIfCancellationRequested();
         T itemA = (await CompetitorA.BestNodeAsync(tournament, comparator, cancellationToken)).Item;
         cancellationToken.ThrowIfCancellationRequested();
         T itemB = (await CompetitorB.BestNodeAsync(tournament, comparator, cancellationToken)).Item;
         cancellationToken.ThrowIfCancellationRequested();
         BestCompetitor = (await comparator.CompareAsync(itemA, itemB, cancellationToken)) > 0 ? CompetitorA : CompetitorB;
         tournament.NextWinnerStepsDone++;
         Debug.Assert(tournament.NextWinnerStepsDone <= tournament.NextWinnerStepsMax);
         tournament.GlobalStepsDone++;
         Debug.Assert(tournament.GlobalStepsDone <= tournament.GlobalStepsMax);
     }
     return(await BestCompetitor.BestNodeAsync(tournament, comparator, cancellationToken));
 }