Java中的Thread类构造函数等效于C#中的Thread类构造函数

时间:2017-10-10 20:14:29

标签: c# multithreading stack-overflow

这个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();

1 个答案:

答案 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也无关紧要。