/// <summary> /// 异步设置对象状态。 /// </summary> /// <param name="state">给定的 <see cref="IObjectState"/>。</param> /// <param name="newStatusFactory">给定的新对象状态工厂方法。</param> /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param> /// <returns>返回一个包含状态(兼容不支持枚举类型的实体框架)的异步操作。</returns> public static async ValueTask <object> SetObjectStatusAsync(this IObjectState state, Func <object, object> newStatusFactory, CancellationToken cancellationToken = default) { var currentStatus = await state.GetObjectStatusAsync(cancellationToken).DisableAwaitContext(); return(await state.SetObjectStatusAsync(newStatusFactory(currentStatus), cancellationToken) .DisableAwaitContext()); }
public static async ValueTask <object> SetObjectStatusAsync(this IObjectState state, Func <object, object> newStatusFactory, CancellationToken cancellationToken = default) { state.NotNull(nameof(state)); newStatusFactory.NotNull(nameof(newStatusFactory)); var newStatus = await state.GetObjectStatusAsync(cancellationToken).ConfigureAwait(); return(await state.SetObjectStatusAsync(newStatusFactory.Invoke(newStatus), cancellationToken) .ConfigureAwait()); }