c# - 为什么 c# continuewith 传递异常?
问题描述
我试图在没有等待的情况下处理任务异常。我正在尝试将 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();
}
}
在测试项目中一切正常,但在我的其他项目中,例外处理 2 次 - 在 catch 和 continuewith 中,并且 catch 首先执行。
解决方案
我的代码(不是这个例子)的问题是我 Wait() 任务。但是当我在 Wait() 之前收到异常时,Wait 会生成异常
推荐阅读
- ios - UITableViewCell 对齐列以适应内容
- javascript - heroku 上的 node.js 应用程序出现问题
- java - 带有一个 return 语句的 Java 递归
- python - 如何迭代地读取网站和保存 har 数据(我有 1000 个 URL 的 CSV 文件 - 但无法保存具有唯一名称的文件
- android - 更改导航抽屉中的单个图标大小
- c++ - 如何决定 constexpr 是否返回引用
- vhdl - vhdl“表达式不是常数”
- ios - UIView 作为 SCNGeometry 的漫反射材质故障
- attributes - 如何自定义 TEI 方案/如何向 TEI Doc 添加自定义属性?
- javascript - 我的 setInterval 时间似乎不起作用