private static void Test01() { Console.WriteLine("// Test 01"); Console.WriteLine(); Console.WriteLine("Creating object with async lazy properties."); var sw = new Stopwatch(); sw.Start(); var o = new ObjectWithLazy(false); ShowElapsed(sw.ElapsedMilliseconds); Console.WriteLine("Waiting 1s"); Thread.Sleep(1000); ShowElapsed(sw.ElapsedMilliseconds); sw.Restart(); Console.WriteLine("First call, should take 3s (1.5s for each)"); Console.WriteLine($"Result: {o.Number1 + o.Number2}"); ShowElapsed(sw.ElapsedMilliseconds); sw.Restart(); Console.WriteLine("Second call, should take 0"); Console.WriteLine($"Result: {o.Number1 + o.Number2}"); ShowElapsed(sw.ElapsedMilliseconds); Console.WriteLine(); Console.WriteLine("Creating object with async lazy properties and start them."); sw.Restart(); o = new ObjectWithLazy(true); ShowElapsed(sw.ElapsedMilliseconds); Console.WriteLine("Waiting 1s"); Thread.Sleep(1000); ShowElapsed(sw.ElapsedMilliseconds); sw.Restart(); Console.WriteLine("First call, should take cca 0.5s, because lazy initialization has been start in ctor."); Console.WriteLine($"Result: {o.Number1 + o.Number2}"); ShowElapsed(sw.ElapsedMilliseconds); sw.Restart(); Console.WriteLine("Second call, should take 0"); Console.WriteLine($"Result: {o.Number1 + o.Number2}"); ShowElapsed(sw.ElapsedMilliseconds); }
private static void Test02() { Console.WriteLine("// Test 02"); Console.WriteLine("// 50 object with started lazy in parallel"); Console.WriteLine(); var sw = new Stopwatch(); sw.Start(); Enumerable.Range(0, 50).AsParallel().ForAll(i => { var o = new ObjectWithLazy(true); Console.WriteLine($"Iteration: {i}, Result: {o.Number1 + o.Number2}, ThreadId: {Thread.CurrentThread.ManagedThreadId}"); }); sw.Stop(); ShowElapsed(sw.ElapsedMilliseconds); }