static Task P_BeforeDisposeAsync(P_Lifecycle lifecycle, Action continuation) { try { if (lifecycle is null) { throw new ArgumentNullException(paramName: nameof(lifecycle)); } // if (lifecycle.Disposing || lifecycle.IsDisposed) { return(TaskUtilities.FromVoidResult()); } else { return(doDisposeAsync()); } } catch (Exception exception) { return(TaskUtilities.FromError(error: exception)); } // async Task doDisposeAsync() { lifecycle.SetDisposeRequested(); var acquisition = lifecycle._acquisition; if (!(acquisition is null)) { await acquisition.ReleaseAsync().ConfigureAwait(false); } continuation?.Invoke(); } }
public static Task DisposeAsync(P_Lifecycle lifecycle) { try { if (lifecycle is null) { throw new ArgumentNullException(paramName: nameof(lifecycle)); } // if (lifecycle.Disposing || lifecycle.IsDisposed) { return(TaskUtilities.FromVoidResult()); } else { return(P_BeforeDisposeAsync(lifecycle: lifecycle, continuation: lifecycle.Dispose)); } } catch (Exception exception) { return(TaskUtilities.FromError(error: exception)); } }