public Task<ServiceInfo[]> LookupAsync(string name, string group)
		{
			if (name == null) return Task.FromResult((ServiceInfo[])null);

			EnsureStartComplete();

			var key = new ServiceIdentifier(name, group);
			var url = _serviceAddressDictionary.GetOrAdd(key, key1 =>
			{
				try
				{
					var urls = LookupInternalAsync(key1);
					var item = new ClientLookupItem
					{
						ClientInfo = key1,
						Addresses = urls.Result,
					};
					return item;
				}
				catch (AggregateException ex)
				{
					var kex = ex.InnerException as KeeperException;
					if (kex?.getCode() == KeeperException.Code.SESSIONEXPIRED)
					{
						if (_startTask?.IsCompleted == true)
							_startTask = Start();
					}

					throw ex.InnerException;
				}
			});

			return Task.FromResult(url?.Addresses);
		}
Example #2
0
        public Task <ServiceInfo[]> LookupAsync(string name, string group)
        {
            if (name == null)
            {
                return(Task.FromResult((ServiceInfo[])null));
            }

            EnsureStartComplete();

            var key = new ServiceIdentifier(name, group);
            var url = _serviceAddressDictionary.GetOrAdd(key, key1 =>
            {
                try
                {
                    var urls = LookupInternalAsync(key1);
                    var item = new ClientLookupItem
                    {
                        ClientInfo = key1,
                        Addresses  = urls.Result,
                    };
                    return(item);
                }
                catch (AggregateException ex)
                {
                    var kex = ex.InnerException as KeeperException;
                    if (kex?.getCode() == KeeperException.Code.SESSIONEXPIRED)
                    {
                        if (_startTask?.IsCompleted == true)
                        {
                            _startTask = Start();
                        }
                    }

                    throw ex.InnerException;
                }
            });

            return(Task.FromResult(url?.Addresses));
        }