using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace System;
///
/// Async implementation of .
///
///
/// Credits: https://devblogs.microsoft.com/pfxteam/asynclazyt/
///
/// Type of value to be returned.
public sealed class AsyncLazy : Lazy>
{
public TaskAwaiter GetAwaiter() => this.Value.GetAwaiter();
public AsyncLazy(Func valueFactory)
: base(() => Task.Factory.StartNew(valueFactory))
{
}
public AsyncLazy(Func> taskFactory)
: base(() => Task.Factory.StartNew(() => taskFactory()).Unwrap())
{
}
}