Answers:
显然,在这个问题上似乎没有太多的解释,但是应该使用退出代码来指示线程如何退出,0
倾向于表示线程安全退出,而其他任何事物都表明线程没有退出。不能按预期退出。但是,您可以自己在代码中设置此退出代码,以完全忽略它。
我能找到更多的信息是有用的最接近的链接是这个
从上面的链接引用:
无论退出方法是什么,从进程或线程返回的整数必须是0-255(8位)之间的值。零值表示成功,非零值表示失败。尽管您可以尝试将任何整数值作为退出代码返回,但是只有整数的最低字节作为退出代码的一部分从您的进程或线程中返回。操作系统使用高位字节来传达有关进程的特殊信息。退出代码在批处理/ shell程序中非常有用,批处理/ shell程序根据一个程序的成功或失败有条件地执行其他程序。
从GetEXitCodeThread的文档中
重要说明:只有在线程终止后,GetExitCodeThread函数才返回由应用程序定义的有效错误代码。因此,应用程序不应使用STILL_ACTIVE(259)作为错误代码。如果线程返回STILL_ACTIVE(259)作为错误代码,则测试该值的应用程序可以将其解释为意味着该线程仍在运行,并在线程终止后继续测试该线程的完成情况,这可能会使线程应用陷入无限循环。
我对这一切的理解是,如果您将自己的应用程序中的线程用于自己的应用程序,则退出代码并没有多大关系。如果您同时运行两个相互依赖的线程,则可能是一个例外。如果需要外部源读取此错误代码,则可以将其设置为让其他应用程序知道您的线程状态。
RunAsync().Wait();
static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }
问题是,任务是由线程池线程执行的,并且基于线程池的启发式方法,即使任务完成后,它也可能不会终止线程。线程只是返回线程池,等待分配下一个任务。这就是为什么退出代码STILL_ACTIVE(259)在这里听起来如此直观的原因。
正如Sayse所述,退出代码259 (0x103)
具有特殊含义,在这种情况下,正在调试的进程仍在运行。
在调试Web服务时,我看到了很多东西,因为线程在执行每个Web服务调用后继续运行(因为它仍在侦听其他调用)。
我发生的事情是我的解决方案中有多个项目。我打算调试项目1,但是将项目2设置为默认的启动项目。我通过在项目上右键单击并选择“设置为启动项目”来解决此问题,然后运行调试就可以了。