C#在新线程中调用方法

Bre*_*ett 42 c# multithreading

我正在寻找一种方法来调用新线程上的方法(使用C#).

例如,我想呼吁SecondFoo()一个新的线程.但是,我希望在SecondFoo()完成时终止该线程.

我已经看到了几个线程的例子C#,但没有一个适用于我需要生成的线程终止自身的特定场景.这可能吗?

如何强制生成的线程Secondfoo()在完成后终止运行?

有没有人遇到过这方面的例子?

Jon*_*eet 85

如果您实际启动了一个新线程,该方法在方法完成时终止:

Thread thread = new Thread(SecondFoo);
thread.Start();
Run Code Online (Sandbox Code Playgroud)

现在SecondFoo将在新线程中调用,线程将在完成时终止.

你是否真的意味着你想让线程在调用线程中的方法完成时终止?

编辑:请注意,启动一个线程是一个相当昂贵的操作.你肯定需要一个全新的线程而不是使用线程池线程吗?考虑使用ThreadPool.QueueUserWorkItem或(最好是,如果您使用的是.NET 4)TaskFactory.StartNew.

  • 就是这样:-)我不知道当没有更多的语句要执行时线程就会终止。这就是我需要的确切答案。非常感谢!!! (2认同)

Ron*_*ijm 58

它真的必须是一个线程,还是一个任务呢?

如果是这样,最简单的方法是:

Task.Factory.StartNew(() => SecondFoo())
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`Task.Run` (3认同)

Art*_*tak 9

在.Net线程由线程池管理,所以你可以启动它并忘记它!考虑这段代码.

new Thread(new ThreadStart(SecondFoo)).Start();
Run Code Online (Sandbox Code Playgroud)

  • 这段代码实际上创建了一个新线程,而不是线程池线程 (2认同)
  • 谢谢亚历克斯。重新阅读我的答案后我也很惊讶!已更正。 (2认同)

Joh*_*eer 6

异步版本:

private async Task DoAsync()
{
    await Task.Run(async () =>
    {
        //Do something awaitable here
    });
}
Run Code Online (Sandbox Code Playgroud)