[英]Can't catch exception in background task
我的问题是,如果我调试Windows 8 Store App
的后台任务并收到Error
(异步方法调用时)。 它没有跳入我的发言中 。 调试器跳到后台任务代码末尾的deferral.Complete()
方法(在IBackgroundTask
的Run
方法中)。
这是我的代码:
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
方法设置为Task
并await
它:
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.