using System.Collections.Generic;
using System.Threading.Tasks;
public static async Task Main()
bool condition(int conditionNr) {
Console.WriteLine("Testing condition #{0}", conditionNr);
var expensiveDbAccess = new Lazy<Task<IEnumerable<int>>>(async () => {
Console.WriteLine("Executing expensive query for User '{0}'", userId);
return new List<int>{1,2,3,4,5};
Console.WriteLine("Going down the rabbit hole ...");
if(condition(1)){ Console.WriteLine("1"); }
else if(condition(2)){ Console.WriteLine("2"); }
else if(condition(3)){ Console.WriteLine("3"); }
else if( (await expensiveDbAccess.Value).Contains(6) ){ Console.WriteLine("Contained 6"); }
else if( (await expensiveDbAccess.Value).Contains(3) ){ Console.WriteLine("Contained 3"); }
else if(condition(4)){ Console.WriteLine("4"); }
else if(condition(5)){ Console.WriteLine("5"); }