我试图启动一个线程,将其存储为引用,然后在单击按钮时终止它。但是在启动线程并让它执行一些工作之后,引用在" 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
有人可以解释为什么会这样吗? 提前谢谢!
答案 0 :(得分:2)
在我的开始方法中,我只是等待一系列任务。我假设这些是由线程执行的,我启动了启动方法,对吗?
错误。
如果await
发生在不完整等待(通常为:Task
/ Task<T>
或ValueTask<T>
),则会注册延续并<强>返回即可。如果返回到调用堆栈的顶部:您的线程完成。
另外,当等待完成时,将调用继续。此可能在正在完成的线程上同步 ,或者可以通过调度程序(如sync-context)。
它可以运行的一件事是执行await
的线程:因为该线程已经完成。