4 using System.Collections.Generic;
 
    6 namespace SiliconStudio.Core.MicroThreading
 
   12     public class MicroThreadLocal<T>
 
   14         private readonly Func<T> valueFactory;
 
   15         private readonly Dictionary<MicroThread, T> values = 
new Dictionary<MicroThread, T>();
 
   20         private T valueOutOfMicrothread;
 
   25         private bool valueOutOfMicrothreadSet;
 
   41             this.valueFactory = valueFactory;
 
   55                 var microThread = Scheduler.CurrentMicroThread;
 
   59                     if (microThread == null)
 
   61                         if (!valueOutOfMicrothreadSet)
 
   62                             valueOutOfMicrothread = valueFactory != null ? valueFactory() : 
default(T);
 
   63                         value = valueOutOfMicrothread;
 
   65                     else if (!values.TryGetValue(microThread, out value))
 
   66                         values.Add(microThread, value = valueFactory != null ? valueFactory() : 
default(T));
 
   73                 var microThread = Scheduler.CurrentMicroThread;
 
   77                     if (microThread == null)
 
   79                         valueOutOfMicrothread = value;
 
   80                         valueOutOfMicrothreadSet = 
true;
 
   84                         values[microThread] = value;
 
   92             var microThread = Scheduler.CurrentMicroThread;
 
   96                 if (microThread == null)
 
   98                     valueOutOfMicrothread = 
default(T);
 
   99                     valueOutOfMicrothreadSet = 
false;
 
  103                     values.Remove(microThread);
 
MicroThreadLocal()
Initializes a new instance of the MicroThreadLocal{T} class. 
 
MicroThreadLocal(Func< T > valueFactory)
Initializes a new instance of the MicroThreadLocal{T} class.