}
}
- T InitValue () {
+ T InitValue ()
+ {
+ Func<T> init_factory;
+ T v;
+
switch (mode) {
- case LazyThreadSafetyMode.None: {
- var init_factory = factory;
+ case LazyThreadSafetyMode.None:
+ init_factory = factory;
if (init_factory == null)
throw exception = new InvalidOperationException ("The initialization function tries to access Value on this instance");
try {
factory = null;
- T v = init_factory ();
+ v = init_factory ();
value = v;
Thread.MemoryBarrier ();
inited = true;
throw;
}
break;
- }
- case LazyThreadSafetyMode.PublicationOnly: {
- var init_factory = factory;
- T v;
+
+ case LazyThreadSafetyMode.PublicationOnly:
+ init_factory = factory;
//exceptions are ignored
if (init_factory != null)
factory = null;
}
break;
- }
- case LazyThreadSafetyMode.ExecutionAndPublication: {
+
+ case LazyThreadSafetyMode.ExecutionAndPublication:
lock (monitor) {
if (inited)
return value;
if (factory == null)
throw exception = new InvalidOperationException ("The initialization function tries to access Value on this instance");
- var init_factory = factory;
+ init_factory = factory;
try {
factory = null;
- T v = init_factory ();
+ v = init_factory ();
value = v;
Thread.MemoryBarrier ();
inited = true;
}
}
break;
- }
+
default:
throw new InvalidOperationException ("Invalid LazyThreadSafetyMode " + mode);
}