为了账号安全,请及时绑定邮箱和手机立即绑定

C# async-await 如何处理长操作?

C# async-await 如何处理长操作?

C#
临摹微笑 2022-07-23 17:44:11
我的服务中有以下代码:        // 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”方法。为什么我的带有域的真实代码不等待以及如何正确执行?
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

你甚至可能没有异步等待的问题。

第一个操作执行异步并且您等待,但这是 DNS 配置更改 - 由于多个 DNS 缓存层,它可能在几分钟内不可见 office 365。这里的错误假设是:

  • DNS 更改立即可见

  • 这是一个异步/等待问题。

通常对于像 DNS 这样的东西,您可能希望每 15 秒重试一次并在一段时间后放弃,或者采用处理更长超时时间的工作流程。这与异步/等待无关 - 这与服务器可能延迟交付的电子邮件相同。它是协议的一部分。


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号