C# 从Task.Run()冒泡出现异常
我有下面的代码,我正试图冒泡出testFunction()中出现的异常。当我尝试运行代码时,没有抛出异常 testFunction是一个我想在固定时间间隔内调用的任务 但是,如果我显式添加throw new CustomException();在Task.Run中,代码正确抛出。我无法理解这种行为。我无法等待或等待该任务。运行是因为我希望该任务。运行是独立运行的,因此我使用ContinueWith,但ContinueWith没有捕获异常,因此不会抛出异常。请告知我这里缺少什么C# 从Task.Run()冒泡出现异常,c#,asynchronous,async-await,task,C#,Asynchronous,Async Await,Task,我有下面的代码,我正试图冒泡出testFunction()中出现的异常。当我尝试运行代码时,没有抛出异常 testFunction是一个我想在固定时间间隔内调用的任务 但是,如果我显式添加throw new CustomException();在Task.Run中,代码正确抛出。我无法理解这种行为。我无法等待或等待该任务。运行是因为我希望该任务。运行是独立运行的,因此我使用ContinueWith,但ContinueWith没有捕获异常,因此不会抛出异常。请告知我这里缺少什么 public cl
public class Example
{
public static CancellationTokenSource source = new CancellationTokenSource();
public static void Main()
{
Console.WriteLine("Hello start");
Task.Run(async () =>
{
while(token.IsCancellationRequested)
{
token.ThrowIfCancellationRequested();
await testFunction(source.Token);
await Task.Delay(1000,token);
}
} ).ContinueWith((t) =>
{
if (t.Exception != null) throw t.Exception;
});
}
public static async Task testFunction(CancellationToken token)
{
throw new CustomException();
}
}
我不能等待或等待任务。运行是因为我想要任务。运行是为了独立运行
您必须使用wait
来观察异常。不过,您不必立即使用wait
。您可以将任务
保存在一个变量中,并在需要时等待它
因此我使用ContinueWith
ContinueWith
不会执行async
/wait
无法执行的任何操作<代码>继续使用对您没有帮助
我试图冒泡出testFunction()中出现的异常
让我把这个问题转过来:例外情况将走向何方?它往哪里冒气泡代码的哪一部分将观察到该异常?回答该问题后,您将找到将
wait
放置在何处的代码有几个问题:1)您不需要该任务。请运行,因为testFunction
已经是异步的。2) 您不需要ContinueWith,因为异常会自动冒泡。3) 你不会等待你的任务。因此,您的程序将在任务结束之前结束,即使不是这样,您的异常也会被吞没。将Main
标记为async,或者对任务调用Wait()方法。您的主方法仍将并发运行,直到您将Wait
或Wait
放在任何位置。我需要以固定的间隔调用testFunction,因此需要无限循环。但您仍然不需要任务。运行,因为异步是由Task.Delay完成的。如果执行publicstaticasynctask Main(){var Task=testFunctionWithWhileLoop(…);MyOtherProgramCode();wait Task;}
则带有while循环的任务将在后台运行,而其他程序代码将与之并行运行。