public void Execute()
        {
            //
            // LazyInitializerは、Lazyと同様に遅延初期化を行うための
            // クラスである。このクラスは、staticメソッドのみで構成され
            // Lazyでの記述を簡便化するために存在する。
            //
            // EnsureInitializedメソッドは
            // Lazyクラスにて、LazyThreadSafetyMode.PublicationOnlyを
            // 指定した場合と同じ動作となる。(race-to-initialize)
            //
            var hasHeavy = new HasHeavyData();

            Parallel.Invoke
            (
                () => { Output.WriteLine("Created. [{0}]", hasHeavy.Heavy.CreatedThreadId); },
                () => { Output.WriteLine("Created. [{0}]", hasHeavy.Heavy.CreatedThreadId); },
                // 少し待機してから、作成済みの値にアクセス.
                () =>
            {
                Thread.Sleep(TimeSpan.FromMilliseconds(2000));
                Output.WriteLine(">>少し待機してから、作成済みの値にアクセス.");
                Output.WriteLine(">>Created. [{0}]", hasHeavy.Heavy.CreatedThreadId);
            }
            );
        }
        public void Execute()
        {
            //
            // LazyInitializerは、Lazyと同様に遅延初期化を行うための
            // クラスである。このクラスは、staticメソッドのみで構成され
            // Lazyでの記述を簡便化するために存在する。
            //
            // EnsureInitializedメソッドは
            // Lazyクラスにて、LazyThreadSafetyMode.PublicationOnlyを
            // 指定した場合と同じ動作となる。(race-to-initialize)
            //
            var hasHeavy = new HasHeavyData();

            Parallel.Invoke
                (
                    () => { Output.WriteLine("Created. [{0}]", hasHeavy.Heavy.CreatedThreadId); },
                    () => { Output.WriteLine("Created. [{0}]", hasHeavy.Heavy.CreatedThreadId); },
                    // 少し待機してから、作成済みの値にアクセス.
                    () =>
                    {
                        Thread.Sleep(TimeSpan.FromMilliseconds(2000));
                        Output.WriteLine(">>少し待機してから、作成済みの値にアクセス.");
                        Output.WriteLine(">>Created. [{0}]", hasHeavy.Heavy.CreatedThreadId);
                    }
                );
        }