代码之家  ›  专栏  ›  技术社区  ›  B. Witter

是否使用Azure批处理重试删除池或作业?

  •  3
  • B. Witter  · 技术社区  · 8 年前

    我正在使用 this Microsoft tutorial 作为使用Azure批处理池、作业和容器的起点。

    我稍微修改了他们删除池和作业的代码

    // Cleanup Batch Account Resources
    // Clean up Job
    await batchClient.JobOperations.DeleteJobAsync($"{BatchConstants.JobIdPrefix}-{Guid}");
                
    // Clean up Pool
    await batchClient.PoolOperations.DeletePoolAsync($"{BatchConstants.PoolIdPrefix}-{Guid}");
    

    当我在本地运行此代码时,这非常有效,但当它进入我的开发环境时,在删除池或作业(通常是作业)时会遇到问题。我返回状态代码“ServiceUnavailable”。

    似乎没有 JobOperations PoolOperations 有一个重试策略的概念,那么如果返回ServiceUnavailable状态,有没有其他方法可以让它重试删除池和/或作业几次?或者我应该在本质上是一个for循环中尝试它,如果它返回了一个错误的状态代码,那么该循环最多运行5次(大约),或者如果返回了一个好的状态代码,则继续运行程序的其余部分?

    谢谢你的帮助。

    1 回复  |  直到 5 年前
        1
  •  4
  •   fpark    8 年前

    您可以在上提供重试策略 batchClient 它本身将应用于所有可重试的操作(即,如果操作是可重试的,客户端将代表您自动重试该操作)。例如,要添加每5秒重试一次的线性重试策略,最多重试10次:

    batchClient.CustomBehaviors.Add(RetryPolicyProvider.LinearRetryProvider(TimeSpan.FromSeconds(5), 10))
    

    您可以使用任何 existing retry policies 或者通过实现 IRetryPolicy