29 lines
997 B
C#
29 lines
997 B
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
namespace System.Threading.Tasks
|
|
{
|
|
internal static class TaskExtensions
|
|
{
|
|
public static async Task NoThrow(this Task task)
|
|
{
|
|
await new NoThrowAwaiter(task);
|
|
}
|
|
}
|
|
|
|
internal readonly struct NoThrowAwaiter : ICriticalNotifyCompletion
|
|
{
|
|
private readonly Task _task;
|
|
public NoThrowAwaiter(Task task) { _task = task; }
|
|
public NoThrowAwaiter GetAwaiter() => this;
|
|
public bool IsCompleted => _task.IsCompleted;
|
|
// Observe exception
|
|
public void GetResult() { _ = _task.Exception; }
|
|
public void OnCompleted(Action continuation) => _task.GetAwaiter().OnCompleted(continuation);
|
|
public void UnsafeOnCompleted(Action continuation) => OnCompleted(continuation);
|
|
}
|
|
}
|