#if !HAS_ASYNCDISPOSABLE // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Runtime.InteropServices; namespace System.Runtime.CompilerServices { /// Provides a type that can be used to configure how awaits on an are performed. [StructLayout(LayoutKind.Auto)] public readonly struct ConfiguredAsyncDisposable { private readonly IAsyncDisposable _source; private readonly bool _continueOnCapturedContext; internal ConfiguredAsyncDisposable(IAsyncDisposable source, bool continueOnCapturedContext) { _source = source; _continueOnCapturedContext = continueOnCapturedContext; } public ConfiguredValueTaskAwaitable DisposeAsync() => // as with other "configured" awaitable-related type in CompilerServices, we don't null check to defend against // misuse like `default(ConfiguredAsyncDisposable).DisposeAsync()`, which will null ref by design. _source.DisposeAsync().ConfigureAwait(_continueOnCapturedContext); } } #else using System.Runtime.CompilerServices; [assembly: TypeForwardedTo(typeof(ConfiguredAsyncDisposable))] #endif