【问题标题】:Scaling an Azure Elastic Pool with .NET Fluent API使用 .NET Fluent API 扩展 Azure 弹性池
【发布时间】:2018-02-05 17:11:59
【问题描述】:

我正在使用 Azure Fluent API Azure Management Libraries for .NET 来扩展 Azure 弹性池中的 DTU,我想知道是否可以触发更新而无需等待处理完成。

目前,以下代码块将等到弹性池完成扩展后才能继续执行。对于大型高级弹性池,这可能意味着这条线路最多需要 90 分钟才能完成。

ElasticPool .Update() .WithDtu(1000) .Apply();

还有一个 ApplyAsync() 方法,我可以故意不使用 await 来允许程序继续执行,如果我采用这种方法,程序将在调用此行后不久结束执行,我不确定这个库是否已经旨在以这种方式工作。

有谁知道无需等待响应即可触发更新的更好解决方案?或者是否可以安全地触发异步方法而不等待响应?

【问题讨论】:

    标签: azure azure-sql-database


    【解决方案1】:

    目前无法在 Fluent SDK 中针对更新场景进行触发和忘记调用,但我们正在寻找未来启用手动状态轮询的方法。一种选择是创建一个等待完成的线程。另一种是使用 Inner getter 并进行低级别的 BeginCreateOrUpdateAsync/BeginUpdateAsync 方法调用,然后进行手动轮询。

    附带说明,如果您需要进行多个调用,然后等待所有调用完成,您可以使用 Task.WaitAll(...) 并提供 ApplyAsync 任务的列表。

    如果您遇到任何错误,请在repo 中记录问题,因为这样您就可以跟踪修复进度。

    编辑:仅供参考,调用阻塞不是因为 SDK 正在等待 Azure 的响应,而是 SDK 等待调用完成、更新操作完成并且资源已准备好用于进一步操作。如果在您的情况下,弹性池仍处于更新过程中,那么只需触发更新然后尝试使用资源就会导致错误响应。

    【讨论】:

    • 感谢您的回复,最后我沿着向 Task.Wait() 添加超时的路线走,这样我的程序就不会等待响应。然后我使用 ListActivities() 端点来确定缩放何时完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 2019-06-18
    • 1970-01-01
    相关资源
    最近更新 更多