Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未捕获重试异常_C# - Fatal编程技术网

C# 未捕获重试异常

C# 未捕获重试异常,c#,C#,我有一个在后台运行任务的扩展方法,我把它放在一个try-catch块中,以处理它抛出的任何异常。问题是VisualStudio总是在我的代码的重播部分停止,我不知道为什么 try { task.RunInBackground(); } catch (Exception e) { // do something } 您需要等待这样的任务: try { await task.RunInBackground(); } catch (Exception e) { //

我有一个在后台运行任务的扩展方法,我把它放在一个try-catch块中,以处理它抛出的任何异常。问题是VisualStudio总是在我的代码的重播部分停止,我不知道为什么

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,那么你在任务中抛出了什么异常?忽略例外情况(这不是一个好主意)