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()) { } }