为什么从嵌套任务调用时 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");
我有一个启动长 运行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");