繁体   English   中英

无法在后台任务中捕获异常

[英]Can't catch exception in background task

我的问题是,如果我调试Windows 8 Store App的后台任务并收到Error (异步方法调用时)。 它没有跳入我的发言中 调试器跳到后台任务代码末尾的deferral.Complete()方法(在IBackgroundTaskRun方法中)。

这是我的代码:

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 
        }
    }
}

谢谢

您的InstantSchedule方法是async void并且在调用FetchLogsAsync之后将控制权返回给Run 结果,它跳到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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM