为什么从嵌套任务调用时 JsonConvert.SerializeObject 会失败?

Why does JsonConvert.SerializeObject fail when called from a nested task?

我有一个启动长 运行ning 任务的控制台程序,它又启动 4 x 长 运行ning 任务。长 运行ning 我的意思是所有这些任务都应该 运行 无限期地进行。

但是,从任何嵌套任务调用 JsonConvert.Serialize 会使应用程序无提示地崩溃,没有任何错误消息。

我用一个简单的控制台程序重现了这种行为:

public class TestClass
{
    public string ATestProperty { get; set; }
}

internal class Program
{
    static void Main(string[] args)
    {            
        var outerTask = Task.Factory.StartNew(() =>
        {
            var nestedTask = Task.Factory.StartNew(() =>
            {
                Console.WriteLine("Inside nestedTask");
                var testClass = new TestClass { ATestProperty = "Hi from test class" };
                var serialisedClass = JsonConvert.SerializeObject(testClass);
                Console.WriteLine(serialisedClass);
            });
        });
        
        Console.WriteLine("DONE");
    }
}

这会打印

DONE
Inside nestedTask

如果我调试并逐步执行代码,程序会在执行后立即终止

var serialisedClass = JsonConvert.SerializeObject(testClass);

我不确定我遗漏了什么,也许这是我不知道的任务 + 序列化行为的组合。我也尝试 System.Text.Json 序列化我的数据,结果相同。

You can add Task.WaitAll(Task task) after each block of nested task.

Example:

 var outerTask = Task.Factory.StartNew(() =>
        {
            var nestedTask = Task.Factory.StartNew(() =>
            {
                Console.WriteLine("Inside nestedTask");
                var testClass = new TestClass { ATestProperty = "Hi from test class" };
                var serialisedClass = JsonConvert.SerializeObject(testClass);
                Console.WriteLine(serialisedClass);
            });
            Task.WaitAll(nestedTask);
            
        });
        Task.WaitAll(outerTask);
        
        Console.WriteLine("DONE");