コード例 #1
0
        public bool StartEnlist()
        {
            lock (l)
            {
                if (inProgress)
                {
                    return(false);
                }

                inProgress = true;

                timeoutThreadParam = new TimeoutThreadParam(enlistTimeoutMilliseconds);
                new Thread(() => Timeout(timeoutThreadParam)).Start();
            }

            return(true);
        }
コード例 #2
0
        void Timeout(TimeoutThreadParam param)
        {
            Thread.Sleep(param.TimeoutMilliseconds);
            bool terminate;

            lock (l)
            {
                lock (param)
                {
                    terminate = param.Terminate;
                }

                if (terminate)
                {
                    EndEnlistInternal(false);
                }
            }
        }
コード例 #3
0
        public bool Enlist(ITransaction client)
        {
            lock (l)
            {
                if (!inProgress)
                {
                    return(false);
                }

                lock (timeoutThreadParam)
                {
                    enlisted.Add(client);
                    timeoutThreadParam.Terminate = false;
                }

                timeoutThreadParam = new TimeoutThreadParam(enlistTimeoutMilliseconds);
                new Thread(() => Timeout(timeoutThreadParam)).Start();
            }

            return(true);
        }