我有下面的代码,并且我试图冒泡来自testFunction()的异常。当我尝试运行代码时,不会抛出异常。
testFunction是我要定期调用的任务
但是,如果我明确添加throw new CustomException();在Task.Run中,代码正确抛出。我无法理解这种行为。我无法等待或等待Task.Run,因为我想要task.Run自己独立运行,因此我正在使用ContinueWith,但continueWith没有捕获异常,因此不会抛出该异常。请告诉我我在这里想念什么?
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();
}
}
答案 0 :(得分:0)
我无法等待或等待Task.Run,因为我希望Task.Run自己独立运行
您必须使用await
来观察异常。不过,您不必立即使用await
。您可以将Task
保存在变量中,以后根据需要await
保存。
因此我正在使用ContinueWith
ContinueWith
不会做async
/ await
做不到的任何事情。 ContinueWith
对您没有帮助。 It should actually almost never be used。
我正在尝试冒泡来自testFunction()的异常。
让我扭转一下:去在哪里? to 在哪里冒泡? 代码的哪一部分将观察到该异常?回答该问题后,您将找到放置await
的位置。