- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
<分区>
我在 TPL 编程方面遇到问题。
我在 [ http://stackoverflow.com/questions/7883052/a-tasks-exceptions-were-not-observed-either-by-waiting-on 上使用@h4165f8ghd4f854d6f8h 解决方案时出现 UnobservedTaskException -the-task-or-accessi/11830087#11830087 ] 来处理异常但仍然得到 UnobservedTaskException。
我也在开始任务之前添加了以下代码:
TaskScheduler.UnobservedTaskException += (sender, e) =>
{
e.SetObserved();
throw e.Exception;
};
但是 [ http://stackoverflow.com/questions/10874068/exception-thrown-in-task-thread-not-caught-by-unobservedtaskexception ] 告诉它不会捕获每个 TPL 未处理的异常。
我想传播异常直到到达堆栈顶部然后处理它。
有人可以帮助我吗????
@乔恩双向飞碟
您好,我做了一个较小的复现,感谢检查
class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.tplTestOne();
}
public void tplTestOne()
{
TaskScheduler.UnobservedTaskException += (sender, e) =>
{
e.SetObserved();
throw e.Exception;
};
Task tsk_1 = MyClassHere.createHandledTask(() =>
{
double x = 1;
x = (x + 1) / x;
}, false);
Task tsk_2 = MyClassHere.createHandledTask(() =>
{
double y = 0;
throw new Exception("forced_divisionbyzerodontthrowanymore_test"); // here -> System.Exception was unhandled by user code
}, true);
Task tsk_3 = MyClassHere.createHandledTask(() =>
{
double z = 1;
z = (z + 1) / z;
}, true);
Task tsk_4 = MyClassHere.createHandledTask(() =>
{
double k = 1;
k = (k + 1) / k;
}, true);
Console.ReadLine();
}
}
public static class MyClassHere
{
public static void waitForTsk(Task t)
{
try
{
t.Wait();
}
catch (AggregateException ae)
{
ae.Handle((err) =>
{
throw err;
});
}
}
public static void throwFirstExceptionIfHappens(this Task task)
{
task.ContinueWith(t =>
{
var aggException = t.Exception.Flatten();
foreach (var exception in aggException.InnerExceptions)
{
throw exception; // throw only first, search for solution
}
},
TaskContinuationOptions.OnlyOnFaulted); // not valid for multi task continuations
}
public static Task createHandledTask(Action action)
{
return createHandledTask(action, false);
}
public static Task createHandledTask(Action action, bool attachToParent)
{
Task tsk = null;
if (attachToParent)
{
TaskCreationOptions atp = TaskCreationOptions.AttachedToParent;
tsk = Task.Factory.StartNew(action, atp);
}
else
{
tsk = Task.Factory.StartNew(action);
}
tsk.throwFirstExceptionIfHappens();
return tsk;
}
}
谢谢
这个问题在这里已经有了答案: How to handle all unhandled exceptions when using Task Parallel Library? (3 个答案) 关闭
在我的 MVC 应用程序中,我有时会遇到如下异常: System.Net.WebException: The request was aborted: The request was canceled
我试图了解 .NET 4.0 中的 UnobservedTaskException 问题,所以我编写了以下代码 TaskScheduler.UnobservedTaskException += (se
根据我的研究,我了解到以下内容: TaskScheduler.UnobservedTaskException必须等待任务被垃圾回收,然后该任务的未观察到的异常才会冒泡到 UnobservedTaskE
假设我有一个任务数组 taskArray 并且我使用 ContinueWhenAll 创建了一个任务延续taskArray 中的一项或多项任务抛出一些异常。我的问题是,是否存在任何可能导致 Unobs
我一直在 AWS Lambda 的 CloudWatch 日志中注意到这个异常。 一切似乎都得到了处理,所以我认为这是在 Lambda 完成执行后创建的 AWS 代码(与我编写的代码相反)中的异常。
我无法理解 TPL 中如何处理异常。下面的代码应该可以说明我的问题。 using System; using System.Collections.Generic; using System.Net;
我正在阅读一本关于 C# 任务并行库的书,并有以下示例,但从未触发 TaskScheduler.UnobservedTaskException 处理程序。任何人都可以告诉我原因吗? TaskSched
我最近向生产网站发布了一个 asp.net web api。在大约每天一次的生产中,未处理的异常会导致网站进程循环: An unhandled exception occurred and the p
我正在开发一个 asp.net mvc 应用程序。我的应用程序的架构如下: 一个DBAccessLayer//访问数据库的层 一个 ServiceLayer//连接 1 和 3 的层。 一个 WebL
以下场景在 .NET 4.5 下运行,因此任何 UnobservedTaskException 都不会 terminate the process . 我习惯于在我的应用程序启动时监听任何 Unobs
以下代码在 netcoreapp2.0 应用程序中运行时,似乎并没有最终抛出 UnobservedTaskException using System; using System.Threading;
为了稳健性,我想为 TaskScheduler.UnobservedTaskException 添加一个处理程序。处理程序会记录异常,通知用户并关闭应用程序。 下面的实现有意义吗?在 WPF 中,在此
最近,我在后端 API 应用程序中为每个 UnobservedTaskException 添加了错误日志记录。原因是某些 API 调用执行额外的任务,这些任务在我返回结果后完成,这就是为什么我无法跟踪
我们有一个位于高度异步 PCL 库之上的 Xamarin iOS 应用程序。有可能偶尔某个任务会在库中出现故障而未被观察到。因此,我们在 TaskScheduler 上连接了 UnobservedTa
我见过的一个常见问题是管理任务中未处理的异常。它们不会导致崩溃,它们会悄无声息地发生,当任务失败时我什至无法触发事件!我看到用户规定了自定义类和东西来处理这个问题,我的问题是,是否有一种“标准”的 M
我是一名优秀的程序员,十分优秀!