这个Java Thread构造函数有3个参数。 C#Thread构造函数最多需要两个参数:
初始化Thread类的新实例,指定委托 允许在线程时将对象传递给线程 启动并指定线程的最大堆栈大小。
我的问题是C#中这个Java代码的等价物是什么,所以我可以避免堆栈溢出问题?
new Thread(null, new Runnable() {
public void run() {
try {
new SomeClass().run();
} catch(IOException e) {
}
}
}, "1", 1 << 26).start();
答案 0 :(得分:1)
纯C#等价物将是
var thread = new Thread(() => {
try
{
new SomeClass().Run();
}
catch(IOException)
{
}
}, 1 << 26);
thread.Name = "1";
thread.Start();
然而,在C#中修改堆栈大小是非常罕见的。请参阅我们为上述代码调用的构造函数中的following documentation。
说明
避免使用此构造函数重载。默认 Thread(ThreadStart)构造函数重载使用的堆栈大小是 推荐的线程堆栈大小。如果一个线程有内存问题, 最可能的原因是编程错误,例如无限 递归。
你可以尝试更简单的表达方式。
Task.Run(() => new SomeClass().Run());
因为你没有在旧代码中观察线程的异常,所以如果你捕获IOException也无关紧要。