public static TRank SetRank <TRank>(this IRanking <TRank> ranking, Func <TRank, TRank> newRankFactory) where TRank : struct { ranking.NotNull(nameof(ranking)); newRankFactory.NotNull(nameof(newRankFactory)); return(ranking.Rank = newRankFactory.Invoke(ranking.Rank)); }
/// <summary> /// 异步设置排名。 /// </summary> /// <typeparam name="TRank">指定的排序类型(兼容整数、单双精度的排序字段)。</typeparam> /// <param name="ranking">给定的 <see cref="IRanking{TRank}"/>。</param> /// <param name="newRankFactory">给定的新 <typeparamref name="TRank"/> 工厂方法。</param> /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param> /// <returns>返回一个包含 <typeparamref name="TRank"/>(兼容整数、单双精度的排序字段)的异步操作。</returns> public static ValueTask <TRank> SetRankAsync <TRank>(this IRanking <TRank> ranking, Func <TRank, TRank> newRankFactory, CancellationToken cancellationToken = default) where TRank : struct { ranking.NotNull(nameof(ranking)); newRankFactory.NotNull(nameof(newRankFactory)); return(cancellationToken.RunOrCancelValueAsync(() => ranking.Rank = newRankFactory.Invoke(ranking.Rank))); }