C# AppDomain UnhandledException无法使用异步Foreach
正如您在上面所看到的,它会执行一个未经处理的调试器异常,并且在最后不会捕获它 我在程序内部设置了一个AppDomain崩溃记录器,它可以处理Wait foreachasync()调用之外的所有内容 我有什么遗漏吗 ForEachAsync:C# AppDomain UnhandledException无法使用异步Foreach,c#,C#,正如您在上面所看到的,它会执行一个未经处理的调试器异常,并且在最后不会捕获它 我在程序内部设置了一个AppDomain崩溃记录器,它可以处理Wait foreachasync()调用之外的所有内容 我有什么遗漏吗 ForEachAsync: public static class Extensions { public static Task ForEachAsync<T>(this IEnumerable<T> source, int dop, Func<
public static class Extensions
{
public static Task ForEachAsync<T>(this IEnumerable<T> source, int dop, Func<T, Task> body)
{
return Task.WhenAll(
from partition in Partitioner.Create(source).GetPartitions(dop)
select Task.Run(async delegate {
using (partition) {
while (partition.MoveNext()) {
await body(partition.Current);
}
}
}));
}
}
//Call this in Program or early on in code
UnhandledExceptionLogger.Initialize();
//Call this, Nothing gets caught in the handler
async public void throwException() {
await Extensions.ForEachAsync(source, 10, combo => {
return Task.Run(() => {
throw new IOException();
}
}
}
//Whereas if I call this, it does
public void throwExceptionSynchronous() {
throw new IOException();
}
static class UnhandledExceptionLogger {
public static void Initialize() {
AppDomain.CurrentDomain.UnhandledException += _CurrentDomain_UnhandledException;
}
static void _CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
if (e.IsTerminating) {
MessageBox.Show("UNHANDLED EXCEPTION CAUGHT!\n" + e.ExceptionObject.ToString());
Environment.Exit(1);
}
}
}