Example #1
0
            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();
                }
            }
Example #2
0
 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));
     }
 }