Exemplo n.º 1
0
        DataSlotWrapper DataSlotCreator()
        {
            var      wrapper     = new DataSlotWrapper();
            Func <T> valSelector = valueFactory;

            wrapper.Getter = delegate {
                wrapper.Creating = true;
                try {
                    T val = valSelector();
                    wrapper.Creating = false;
                    wrapper.Init     = true;
                    wrapper.Getter   = () => val;
                    return(val);
                } catch (Exception e)
                {
                    wrapper.Creating = false;
                    if (cachedException != null)
                    {
                        cachedException.Value = e;
                    }
                    throw e;
                }
            };

            return(wrapper);
        }
Exemplo n.º 2
0
        T GetValueThreadLocal()
        {
            DataSlotWrapper myWrapper = GetWrapper();

            if (myWrapper.Creating)
            {
                throw new InvalidOperationException("The initialization function attempted to reference Value recursively");
            }

            return(myWrapper.Getter());
        }
Exemplo n.º 3
0
        DataSlotWrapper GetWrapper()
        {
            DataSlotWrapper myWrapper = (DataSlotWrapper)Thread.GetData(localStore);

            if (myWrapper == null)
            {
                myWrapper = DataSlotCreator();
                Thread.SetData(localStore, myWrapper);
            }

            return(myWrapper);
        }
Exemplo n.º 4
0
        bool IsInitializedThreadLocal()
        {
            DataSlotWrapper myWrapper = (DataSlotWrapper)Thread.GetData(localStore);

            if (myWrapper == null)
            {
                myWrapper = DataSlotCreator();
                Thread.SetData(localStore, myWrapper);
            }

            return(myWrapper.Init);
        }
Exemplo n.º 5
0
        T GetValueThreadLocal()
        {
            DataSlotWrapper myWrapper = Thread.GetData(localStore) as DataSlotWrapper;

            // In case it's the first time the Thread access its data
            if (myWrapper == null)
            {
                myWrapper = DataSlotCreator();
                Thread.SetData(localStore, myWrapper);
            }

            return(myWrapper.Getter());
        }
Exemplo n.º 6
0
        DataSlotWrapper DataSlotCreator()
        {
            DataSlotWrapper wrapper     = new DataSlotWrapper();
            Func <T>        valSelector = initializer;

            wrapper.Getter = delegate {
                T val = valSelector();
                wrapper.Init   = true;
                wrapper.Getter = delegate { return(val); };
                return(val);
            };

            return(wrapper);
        }
Exemplo n.º 7
0
        DataSlotWrapper DataSlotCreator()
        {
            DataSlotWrapper wrapper     = new DataSlotWrapper();
            Func <T>        valSelector = initializer;

            wrapper.Getter = delegate {
                wrapper.Creating = true;
                try {
                    T val = valSelector();
                    wrapper.Creating = false;
                    wrapper.Init     = true;
                    wrapper.Getter   = () => val;
                    return(val);
                } catch (Exception e) {
                    cachedException = e;
                    throw e;
                }
            };

            return(wrapper);
        }
Exemplo n.º 8
0
        bool IsInitializedThreadLocal()
        {
            DataSlotWrapper myWrapper = GetWrapper();

            return(myWrapper.Init);
        }