我的服务中包含以下代码:
// add Txt record to DNSimple with verification text
await CreateDomainRecordAsync(domain, new DomainRecordDto
{
//....
});
// verify domain on Office365
await _office365domainService.VerifyDomainAsync(domain);
第一个操作是调用端点1(域注册器)并将TXT记录添加到域。第二个操作是调用端点2(Office365),该端点将验证域注册器中是否存在TXT记录。
此代码不起作用,第二个操作出现异常,该TXT记录不存在。
我创建了测试代码:
public IActionResult LongOperation()
{
Thread.Sleep(10 * 1000);
return Ok();
}
public IActionResult Test()
{
return Ok();
}
并调用它:
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri("http://test***.azurewebsites.net/home/");
await httpClient.GetAsync("LongOperation");
}
using (HttpClient httpClientLocal = new HttpClient())
{
httpClientLocal.BaseAddress = new Uri("https://localhost:44366/Home");
await httpClientLocal.GetAsync("Test");
}
它按预期工作,调用第一个方法,在执行“ LongOperation”时等待10秒钟,然后调用“ Test”方法。
为什么我的带有域的真实代码不等待以及如何正确执行?
答案 0 :(得分:6)
您甚至可能没有async-await问题。
第一个操作执行异步操作,然后等待,但这是DNS配置更改-由于存在多个DNS缓存层,因此在几分钟内Office 365可能不可见。这里的错误假设是:
通常,对于DNS之类的东西,您可能希望每隔15秒重试一次,并在一段时间后放弃,或者使用工作时间更长的工作流。这与异步/等待无关,与服务器可能会延迟发送的电子邮件相同。它是协议的一部分。