假设我有一个这样的程序:
class Program {
static void Main() {
new Task(() => {
NewClass class = new NewClass();
}).Start();
}
}
class NewClass {
public NewClass() {
new Task(() => {
someMethod();
}).Start();
}
public void someMethod() {/* Do stuff */}
}
创建新对象class
后第一个thrad会退出还是会继续运行?
如果删除了对象(class = null),第二个线程会被取消吗?
答案 0 :(得分:2)
嗯..您的任务将很快完成,具体取决于您在someMethod()中的实现。我们假设它是Thead.Delay(),延迟很大。
任务将在您的Main方法结束时结束 - 所以很快。添加一个Console.ReadKey()来解决这个问题。
如果您不再在系统中的任何位置引用NewClass对象,它最终将被Garbage Collected,但这与Task无关。如果任务引用该对象,它将保留在内存中。换句话说 - 你不能删除它。
另外,Task!= Thread。如果您创建了100个任务,那么很可能最终不会有100个线程。
答案 1 :(得分:1)
创建新对象类后第一个thrad会退出还是会继续运行?
谁知道呢。任务不是线程。任务结束,但线程可能会根据任务调度程序选择另一个任务。
如果删除对象(class = null)
根本不删除对象。对象仍在那里。无法删除C#中的对象 - 留给GC。
答案 2 :(得分:1)
创建新对象类后第一个thrad会退出还是会继续运行?
任务使用的线程来自线程池。任务完成后,线程将返回到线程池以执行其他工作。
如果删除了对象(class = null),第二个线程会被取消吗?
不,它对第二个帖子没有影响。将变量设置为null不会“删除”对象...它只是删除对它的引用。