public class GetOnce<T>
{
private readonly Func<Task<T>> fn;
private Task<T> dataTask = null;
public GetOnce(Func<Task<T>> initialFn)
{
fn = initialFn;
}
public async Task<T> Get()
{
dataTask ??= fn();
return await dataTask;
}
}
// Example
public class Program
{
public static GetOnce<string> Content = new(() => { Console.WriteLine("ReadingFile"); return File.ReadAllTextAsync(@"C:\test.txt"); });
public static async Task Main()
{
Console.WriteLine(await Content.Get());
Console.WriteLine(await Content.Get());
}
}823700cookie-checkC# GetOnce