Controller GetOrCreateController(Link link) { Controller controller; lock (this.SyncRoot) { if (!this.controllers.TryGetValue(link.Session.Connection, out controller)) { Session session = new Session(link.Session.Connection); controller = new Controller(session); controller.Closed += this.OnControllerClosed; this.controllers.Add(link.Session.Connection, controller); } } return controller; }
public async Task<byte[]> EnlistAsync(Link link) { if (this.txnid != null) { return this.txnid; } lock (this.syncRoot) { if (this.declareTask == null) { this.controller = this.owner.GetOrCreateController(link); this.declareTask = this.controller.DeclareAsync(); } } return this.txnid = await this.declareTask; }