using FastGithub.Configuration; using System.Collections.Generic; using System.Net; using System.Threading; using System.Threading.Tasks; namespace FastGithub.DomainResolve { /// /// 域名解析器 /// sealed class DomainResolver : IDomainResolver { private readonly DnsClient dnsClient; /// /// 域名解析器 /// /// public DomainResolver(DnsClient dnsClient) { this.dnsClient = dnsClient; } /// /// 解析ip /// /// 域名 /// /// public async Task ResolveAnyAsync(string domain, CancellationToken cancellationToken = default) { await foreach (var address in this.ResolveAllAsync(domain, cancellationToken)) { return address; } throw new FastGithubException($"解析不到{domain}的IP"); } /// /// 解析域名 /// /// 域名 /// /// public IAsyncEnumerable ResolveAllAsync(string domain, CancellationToken cancellationToken) { return this.dnsClient.ResolveAsync(domain, cancellationToken); } } }