gpt4 book ai didi

c# - 任务中的异常不会导致应用程序崩溃

转载 作者:行者123 更新时间:2023-11-30 21:28:59 26 4
gpt4 key购买 nike

我是任务并行库的新手。我知道前台和后台线程中的异常以相同的方式工作,即它们传播到主线程并使应用程序崩溃(如果未处理)。但是,我在使用任务时看到了不同的行为。当任务中发生异常时,它只是结束其执行而不会导致应用程序或其他任务崩溃。如果我没记错的话,任务使用后台线程,因此异常应该传播到主线程并像普通后台线程一样崩溃。

public static void Foo()
{
throw new Exception("Blahh");
}
static void Main()
{
Task t = Task.Run(()=>Foo());
Thread.Sleep(500);
Console.WriteLine("Main");
}

最佳答案

你应该Wait()你的Task。如果任务有结果,则可以访问调用 Wait()Result 属性。请注意,异常将是 AggregateException,原始异常将在其 InnerExceptions 集合中。

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp
{
class Program
{
static void Main()
{
Example1();
Example2();
Thread.Sleep(500);
Console.WriteLine("Main");
}

public static void Example1()
{
try
{
Console.WriteLine("Example1");
Task t = Task.Run(() => Foo());
t.Wait();
}
catch (AggregateException e)
{
foreach (var ex in e.InnerExceptions)
Console.WriteLine(ex.Message);
}
}

public static void Example2()
{
try
{
Console.WriteLine("Example2");
Task<string> t = Task.Run(() => { Foo(); return "Task result"; });
string result = t.Result;
Console.Write(result);
}
catch (AggregateException e)
{
foreach (var ex in e.InnerExceptions)
Console.WriteLine(ex.Message);
}
}

public static void Foo()
{
throw new Exception("Blahh Exception");
}
}
}

关于c# - 任务中的异常不会导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com