public async Task <IEnumerable <FtpMetadata> > GetMetadata(FtpFilter filter, CancellationToken ctk = default) { IEnumerable <FtpMetadata> res = new FtpMetadata[0]; using (var cts1 = new CancellationTokenSource(_config.ListingTimeout)) using (var cts2 = CancellationTokenSource.CreateLinkedTokenSource(cts1.Token, ctk)) { foreach (var f in filter.FoldersToWatch) { var list = await _ftpClient.ListFilesRecursiveAsync(f, x => filter.FolderFilter?.Invoke(x.FullPath) == false, ctk : cts2.Token).ConfigureAwait(false); res = res.Concat(list.Select(e => new FtpMetadata(e))); } return(res.ToList()); } }