public bool StartEnlist() { lock (l) { if (inProgress) { return(false); } inProgress = true; timeoutThreadParam = new TimeoutThreadParam(enlistTimeoutMilliseconds); new Thread(() => Timeout(timeoutThreadParam)).Start(); } return(true); }
void Timeout(TimeoutThreadParam param) { Thread.Sleep(param.TimeoutMilliseconds); bool terminate; lock (l) { lock (param) { terminate = param.Terminate; } if (terminate) { EndEnlistInternal(false); } } }
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); }