1

hereから読んだ多くのヒントを使用して、Xamarin コア プロジェクトをセットアップしました。

入力したサーバーの URL が有効かどうかを確認するために使用している単純なサービスがあります: IValidateUrlService

Pollyライブラリを使用して、次のようなことをしようとしています。

var request = new PingUrlRequest();
var validateUrlTask = apiService.UserInitiated.ValidateUrl(request);

var response = await Policy
    .Handle<ApiException>()
    .RetryAsync(retryCount: 5)
    .ExecuteAsync(async () =>
        await validateUrlTask);

reachable = HandleServerResponse(response);

例外が発生しない限り、これは正常に機能します。たとえば、テスト対象のサーバーで ApiException を取得していたとき。上記のコードはエラーを吸収しませんでした! 例外がスローされ、プログラムがクラッシュしました。これを行うことによってのみ、コードを適切に機能させることができました。

try
{
    var request = new PingUrlRequest();
    var validateUrlTask = apiService.UserInitiated.ValidateUrl(request);

    var response = await Policy
        .Handle<ApiException>()
        .RetryAsync(retryCount: 5)
        .ExecuteAsync(async () =>
            await validateUrlTask);

    reachable = HandleServerResponse(response);
}
catch (ApiException e)
{
    Mvx.Trace(e.StackTrace);
}

しかし、それは正しくないように感じます...何もしない場合、Handle パラメーターを一番上に置くことのポイントは何ですか? 私はこれを間違って実装しなければなりません!助言がありますか?

4

1 に答える 1

3

がスローされている場合ApiExceptionは、Polly がコードの実行を 5 回再試行し、毎回失敗したため、すべて終了しApiException、処理する必要があることを意味します。

何もしない場合、Handle パラメーターを一番上に置く意味は何ですか?

Handleは、ポリシーを適用する必要がある例外の種類を指定するため、適切に使用しました。

しかし、それは正しくない気がします...

2 つのコード スニペットで使用したのと同じパターンを使用していますが、問題ありません。

お役に立てれば!

于 2015-03-02T16:53:20.920 に答える