线程.NET初始化的差异

f0brbegy  于 2023-01-14  发布在  .NET
关注(0)|答案(1)|浏览(139)

在线程初始化之后和应该何时使用它们之间有什么区别?

Printer printer = new Printer();
Thread thread = new Thread(new ThreadStart(printer.Print0));
Thread thread2 = new Thread(printer.Print0);
Thread thread3 = new Thread(() => printer.Print0());
y1aodyip

y1aodyip1#

System.Threading.Thread具有以下构造函数:

public class Thread
{
    public Thread (System.Threading.ThreadStart start);
}

为什么System.Threading.ThreadStart startdelegate

public delegate void ThreadStart();

示例化委托的语法为:

ThreadStart myDelegate = new ThreadStart(printer.Print0);

// C#2 add this sugar syntax, but it's same instruction that below
ThreadStart myDelegate = printer.Print0;

则以下语法是等效的:

Thread thread = new Thread(new ThreadStart(printer.Print0));
Thread thread2 = new Thread(printer.Print0);

只有第二个在C#2中使用了sugar语法add。
在C#3中,lambda被添加到语言中,并以一种新的方式声明委托:

ThreadStart myDelegate = () => { printer.Print0 };

这就像:

public class MyLambda
{
    public Printer printer;

    void Run()
    {
        printer.Print0();
    }
}

ThreadStart myDelegate = new MyLambda() { printer = printer }.Run;

不完全像第一个例子,因为从技术上讲它调用了一个中间方法。但是唯一的区别是调用堆栈...我认为这个语法相似。
您的评论中的问题:
使用显式调用和lambda表达式有什么好处吗?
不,只是语法不同。你可以选择你喜欢的,不用考虑其他。

相关问题