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.