7

一時的な障害処理に Polly フレームワークを使用しています。同期操作の場合、Polly サーキット ブレーカー ポリシーは正常に機能しますが、非同期バージョンを作成すると、実行が再試行されません。親切に提案:

非同期方式:

private async static Task HelloWorld()
    {
        if (DateTime.Now < programStartTime.AddSeconds(10))
        {
            Console.WriteLine("Task Failed.");
            throw new TimeoutException();
        }
        await Task.Delay(TimeSpan.FromSeconds(1));
        Console.WriteLine("Task Completed.");
    }

Polly サーキット ブレーカーの非同期ポリシー:

private static void AsyncDemo3(Func<Task> action)
    {
        programStartTime = DateTime.Now;

        Policy policy = Policy
            .Handle<TimeoutException>()
            .CircuitBreakerAsync(3, TimeSpan.FromSeconds(2));
        try
        {
            var a = policy.ExecuteAndCaptureAsync(action, true).GetAwaiter().GetResult();
        }
        catch (AggregateException ex)
        {
            Console.WriteLine("Exception: " + ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.Message);
        }
    }

Polly サーキット ブレーカー ポリシーの実行:

AsyncDemo3(HelloWorld);

問題を見つけて解決するのを手伝ってください。

4

2 に答える 2