public override void StartListenerChannel(IListenerChannelCallback listenerChannelCallback, IAdphManager adphManager) { int channelId = listenerChannelCallback.GetId(); AppInstance appInstance; if (!this.appInstanceTable.TryGetValue(channelId, out appInstance)) { lock (ThisLock) { if (!this.appInstanceTable.TryGetValue(channelId, out appInstance)) { int length = listenerChannelCallback.GetBlobLength(); byte[] blob = new byte[length]; listenerChannelCallback.GetBlob(blob, ref length); appInstance = AppInstance.Deserialize(blob); appInstanceTable.Add(channelId, appInstance); } } } if (this.adphManager == null) { this.adphManager = adphManager; } Debug.Assert(channelId == appInstance.Id); this.adphManager.StartAppDomainProtocolListenerChannel(appInstance.AppKey, UdpConstants.Scheme, listenerChannelCallback); }