【发布时间】:2018-11-06 12:19:03
【问题描述】:
我正在尝试在不等待的情况下处理任务异常。 我正在尝试将 ContinueWith 与 TaskContinuationOptions.NotOnRanToCompletion 一起使用。但我有一个主要问题 - 在测试程序中一切顺利,并且只能使用来自 ContinueWith 的代码。但是在我的主程序中,Exception 仍然会去 catch 块和 ContinueWith (函数不会停止工作,但我想以其他方式处理这个异常)。
小例子是这样的
class Program
{
static void Main(string[] args)
{
try
{
Testim();
}
catch (Exception)
{
Console.WriteLine("catch");
}
}
static void method()
{
HttpClient cl=new HttpClient();
cl.PostAsync("http://oru.uri", null);
}
static void Testim()
{
HttpClient cl = new HttpClient();
Task t = cl.PostAsync("http://oru.uri", null);
t.ContinueWith((Task t1) => { Console.WriteLine("success"); }, CancellationToken.None,
TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.Current);
t.ContinueWith((Task t1) => { Console.WriteLine("error"); }, CancellationToken.None,
TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.Current);
Console.ReadKey();
}
}
在测试项目中一切正常,但在我的其他项目中 exeptions 处理 2 次 - 在 catch 和 continuewith 中,catch 先执行。
【问题讨论】:
-
你永远不会开始()或等待任务。并打印异常,至少是消息。
-
这是控制台应用程序(测试程序和主程序)
-
我从不开始任务,但它在主要项目和测试中都在工作......
-
你不需要在这里“开始”任务@bommelding
-
@АлександрПодорин 我正在复制这个。使用 .Net fiddle 我得到了预期的行为,其中只有 OnlyOnFaulted 的延续被称为 dotnetfiddle.net/YrvCZJ
标签: c# exception async-await try-catch rethrow