c#存储线程引用以便以后终止

时间:2018-01-16 20:02:18

标签: c# multithreading

我试图启动一个线程,将其存储为引用,然后在单击按钮时终止它。但是在启动线程并让它执行一些工作之后,引用在" IsAlive"并且查看Thread.CurrentThread并不像我在执行时存储的那样。

为什么我不能启动一个线程,然后从我从它开始的同一个引用中止它?

Thread thread = new Thread(start); thread.Start();

Thread thread = new Thread(start);
thread.Start();

void start (){`
await something();
No longer same thread

有人可以解释为什么会这样吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

  

在我的开始方法中,我只是等待一系列任务。我假设这些是由线程执行的,我启动了启动方法,对吗?

错误。

如果await发生在不完整等待(通常为:Task / Task<T>ValueTask<T>),则会注册延续并<强>返回即可。如果返回到调用堆栈的顶部:您的线程完成。

另外,当等待完成时,将调用继续。此可能在正在完成的线程上同步 ,或者可以通过调度程序(如sync-context)。

它可以运行的一件事是执行await的线程:因为该线程已经完成。