File: src\Shared\FxPolyfills\Task.cs
Web Access
Project: src\src\Libraries\Microsoft.Extensions.ServiceDiscovery\Microsoft.Extensions.ServiceDiscovery.csproj (Microsoft.Extensions.ServiceDiscovery)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.Threading.Tasks;
 
internal enum ConfigureAwaitOptions
{
    None,
    ContinueOnCapturedContext,
    ForceYielding,
    SuppressThrowing,
}
 
internal static partial class FxPolyfillTask
{
    extension(Task task)
    {
        public async Task ConfigureAwait(ConfigureAwaitOptions options)
        {
            if (options == ConfigureAwaitOptions.None)
            {
                await task.ConfigureAwait(false);
            }
            else if (options == ConfigureAwaitOptions.ContinueOnCapturedContext)
            {
                await task.ConfigureAwait(true);
            }
            else if (options == ConfigureAwaitOptions.ForceYielding)
            {
                await Task.Yield();
                await task.ConfigureAwait(false);
            }
            else if (options == ConfigureAwaitOptions.SuppressThrowing)
            {
                try
                {
                    await task.ConfigureAwait(false);
                }
                catch
                {
                }
            }
            else
            {
                throw new InvalidOperationException();
            }
        }
    }
}
 
internal sealed class TaskCompletionSource(TaskCreationOptions options) : TaskCompletionSource<bool>(options)
{
    public void SetResult() => SetResult(true);
}