1

私の問題は、バックグラウンド タスクをデバッグして(while async メソッド呼び出し) をWindows 8 Store App取得した場合です。私の catch ステートメントにはジャンプしません。デバッガーは、バックグラウンド タスク コードの末尾にあるメソッド (のメソッド内) にジャンプします。Errordeferral.Complete()RunIBackgroundTask

これが私のコードです:

public sealed class TileUpdater: IBackgroundTask {
    public void Run(IBackgroundTaskInstance taskInstance) {
        var defferal=taskInstance.GetDeferral();
        InstantSchedule();
        defferal.Complete(); // <- Debugger jumps over here after error
    }

    public static async void InstantSchedule() {
        try {
            [...]

            // Error occurs here
            IEnumerable<LogsEntity> logentities=
                account.IsAvailable
                    ?await TableStorage.FetchLogsAsync(account.Accountname, account.AccountKey, TileUpdater.RetrieveFilter())
                    :null;

            [...]
        }
        catch(Exception) {
            // Debugger doesn't break here 
        }
    }
}

ありがとう

4

1 に答える 1

1

あなたのInstantScheduleメソッドはであり、への呼び出しの直後にasync void制御を返します。その結果、catch ステートメントにジャンプしますが、メソッドが終了した後です。RunFetchLogsAsyncRun

InstantScheduleメソッドをTaskそのawait上に作成する必要があります。

public async void Run(IBackgroundTaskInstance taskInstance) {
    var defferal=taskInstance.GetDeferral();
    await InstantSchedule();
    defferal.Complete();
}

public static async Task InstantSchedule() {
        [...]
}

Runその方法もあるべきであることに注意してくださいasync

于 2014-08-21T09:37:09.737 に答える