C# 未捕获重试异常
我有一个在后台运行任务的扩展方法,我把它放在一个try-catch块中,以处理它抛出的任何异常。问题是VisualStudio总是在我的代码的重播部分停止,我不知道为什么C# 未捕获重试异常,c#,C#,我有一个在后台运行任务的扩展方法,我把它放在一个try-catch块中,以处理它抛出的任何异常。问题是VisualStudio总是在我的代码的重播部分停止,我不知道为什么 try { task.RunInBackground(); } catch (Exception e) { // do something } 您需要等待这样的任务: try { await task.RunInBackground(); } catch (Exception e) { //
try {
task.RunInBackground();
} catch (Exception e) {
// do something
}
您需要等待这样的任务:
try {
await task.RunInBackground();
} catch (Exception e) {
// do something
}
尽可能避免使用异步void。通过将其替换为异步任务来删除异步无效
,如下所示:
public static async Task RunInBackground(this Task task) {
// ....
}
如果您需要知道为什么要避免异步无效,请从msdn中检查此项。您可以执行以下操作:
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
task.RunInBackground().ContinueWith(t =>
{
throw t.Exception;
},
CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted,
TaskScheduler.FromCurrentSynchronizationContext()
).ConfigureAwait(false);
在该任务引发异常之前,此代码不会停止执行该任务。您没有等待任务。RunInBackground语句,因此您的try-catch无效这就是throw的作用。您说它没有被捕获,但您没有说您希望捕获代码的哪一部分,我看不出有任何理由让你认为你的代码的任何部分都会捕捉到它。你能详细说明一下吗?如果你说VisualStudio总是停止,你是说当你只调试时它不能正常工作吗?然后它停止,因为它是一个未捕获的异常,您需要更改与此相关的设置。我只想启动并忘记任务,所以我使用async void。如果我只是等待,我将永远不会执行任何超出等待调用的操作。我的任务在一个无限while循环中运行。如果你需要启动一个dforget,那么你在任务中抛出了什么异常?忽略例外情况(这不是一个好主意)