1

我的问题是,如果我调试我的后台任务Windows 8 Store App并获得一个Error(同时异步方法调用)。它不会跳到我的 catch 语句中。调试器跳转到deferral.Complete()后台任务代码末尾的方法(Run方法中IBackgroundTask)。

这是我的代码:

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并且将控制权返回给Run刚刚调用FetchLogsAsync. 结果,它跳转到 catch 语句,但在Run方法完成之后。

您应该在其上制作InstantSchedule方法:Taskawait

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 回答