/// <summary> /// 异步设置父标识。 /// </summary> /// <typeparam name="TParentId">指定的父标识类型(兼容各种引用与值类型标识)。</typeparam> /// <param name="parentIdentifier">给定的 <see cref="IParentIdentifier{TId}"/>。</param> /// <param name="newParentIdFactory">给定的新 <typeparamref name="TParentId"/> 工厂方法。</param> /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param> /// <returns>返回一个包含 <typeparamref name="TParentId"/> (兼容各种引用与值类型标识)的异步操作。</returns> public static ValueTask <TParentId> SetParentIdAsync <TParentId>(this IParentIdentifier <TParentId> parentIdentifier, Func <TParentId, TParentId> newParentIdFactory, CancellationToken cancellationToken = default) where TParentId : IEquatable <TParentId> { parentIdentifier.NotNull(nameof(parentIdentifier)); newParentIdFactory.NotNull(nameof(newParentIdFactory)); return(cancellationToken.RunOrCancelValueAsync(() => parentIdentifier.ParentId = newParentIdFactory.Invoke(parentIdentifier.ParentId))); }
/// <summary> /// 异步设置父标识。 /// </summary> /// <typeparam name="TId">指定的标识类型(兼容各种引用与值类型标识)。</typeparam> /// <param name="parentIdentifier">给定的 <see cref="IParentIdentifier{TId}"/>。</param> /// <param name="newParentIdFactory">给定的新 <typeparamref name="TId"/> 工厂方法。</param> /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param> /// <returns>返回一个包含 <typeparamref name="TId"/> (兼容各种引用与值类型标识)的异步操作。</returns> public static ValueTask <TId?> SetParentIdAsync <TId>(this IParentIdentifier <TId> parentIdentifier, Func <TId?, TId?> newParentIdFactory, CancellationToken cancellationToken = default) where TId : IEquatable <TId> => cancellationToken.RunValueTask(() => parentIdentifier.ParentId = newParentIdFactory(parentIdentifier.ParentId));