3

バックグラウンド タスクを処理するために Web ジョブの使用を開始しましたが、エラー処理と再試行に関して問題が発生しています。私の関数のいずれかが非同期である場合、関数内で例外をスローしても、関数は常にダッシュボードで成功を報告しているようです。

次の簡単な例を考えてみましょう ->

    public static void AlwaysFail([QueueTrigger("alwaysfail")] string message)
    {
        throw new Exception("Induced Error");
    }

上記のコードは、期待どおりに動作します。メッセージがキューから取り出され、例外がスローされ、WebJobs ダッシュボードで失敗が報告され、メッセージが再度キューに入れられます。これが 5 回発生すると、メッセージは有害なキューに格納されます。

しかし、同様の機能を試みたが、以下のように非同期にした場合->

    public async static void AlwaysFail([QueueTrigger("alwaysfail")] string message)
    {
        throw new Exception("Induced Error");
    }

結果は期待どおりではありません。メッセージはキューからポップされ、例外がスローされますが、ダッシュボードは成功を報告し、何も再試行されません。さらに、これらのケースでは、ダッシュボードが成功を報告しているように見えますが、次のログに示すように、例外がこの世界の終了コードでプロセスをクラッシュさせ、60 秒待ってから再起動しているようです ->

[11/11/2014 06:13:35 > 0dc4f9: 情報] 実行中: 'Functions.AlwaysFail' 'alwaysfail' で新しいキュー メッセージが検出されたため。[11/11/2014 06:13:36 > 0dc4f9: エラー] [11/11/2014 06:13:36 > 0dc4f9: エラー] 未処理の例外: System.InvalidOperationException: 誘発されたエラー [11/11/2014 06:13 :36 > 0dc4f9: ERR ] at Plmtc.BackgroundWorker.Functions.d__2.MoveNext() [11/11/2014 06:13:36 > 0dc4f9: ERR ] --- 例外がスローされた前の場所からのスタック トレースの終わり - -- [11/11/2014 06:13:36 > 0dc4f9: ERR] System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__5(オブジェクト状態) [11/11/2014 06:13:36 > 0dc4f9: ERR] システムで.Threading.QueueUserWorkItemCallback.WaitCallback_Context(オブジェクトの状態) [11/11/2014 06:13:36 > 0dc4f9: ERR] System.Threading.ExecutionContext で。

ダッシュボードで非同期関数を失敗させて、POCO クラスをパラメーターとして取り、メッセージに単純な文字列のみを含める関数を作成する唯一の方法です。このような場合、関数のコードに到達する前に、メッセージ/パラメーターのバインド中にエラーが発生しています。

これらの問題なしに、非同期関数を使用してキュー トリガーに応答することに成功した人はいますか?

4

1 に答える 1

10

メソッドがasync voidであるため、WebJobs SDK はメソッドが完了するまで待機できません。を返すように変更しTaskます...

public async static Task AlwaysFail([QueueTrigger("alwaysfail")] string message)
{
    throw new Exception("Induced Error");
}

詳細については、この投稿を参照してください。

于 2014-11-11T06:40:53.660 に答える