/// <summary>
        /// Lookup records with a name service query
        /// </summary>
        /// <param name="query"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        public static async Task <IEnumerable <INameRecord> > LookupAsync(this INameService service,
                                                                          Expression <Func <INameRecord, bool> > query, CancellationToken ct)
        {
            var result = new List <INameRecord>();
            var lookup = service.Read(new ExecutionDataflowBlockOptions {
                CancellationToken = ct
            });
            await lookup.SendAsync(query).ConfigureAwait(false);

            lookup.Complete();
            while (await lookup.OutputAvailableAsync(ct).ConfigureAwait(false))
            {
                result.Add(await lookup.ReceiveAsync(ct).ConfigureAwait(false));
            }
            return(result);
        }