我有一个在后台运行Task的扩展方法,我把它放在try-catch块中来处理它抛出的任何异常。问题是视觉工作室总是停在我的代码的重新抛出部分,我不知道为什么。
try {
task.RunInBackground();
} catch (Exception e) {
// do something
}
答案 0 :(得分:2)
你需要等待这样的任务:
if (service.priorityData[i] === priorityString) {
logger.info("Priority string", service.priorityData[i].values());
return service.priorityData[i].values();
} else {
return null;
}
service.priorityData = {0 : "None", 20: "Low, 80: "High"}
尽可能避免使用async void。将try {
await task.RunInBackground();
} catch (Exception e) {
// do something
}
替换为async void
,如下所示,删除async Task
:
public static async Task RunInBackground(this Task task) {
// ....
}
如果您需要知道避免异步的原因,请从msdn。
检查此link答案 1 :(得分:0)
您可以执行以下操作:
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
task.RunInBackground().ContinueWith(t =>
{
throw t.Exception;
},
CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext()
).ConfigureAwait(false);
在该任务抛出异常之前,此代码不会停止执行任务。