我有以下代码:编译器是否将处置的对象设置为null?
public class Program
{
private static Task task;
private static int counter = 0;
private static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
if (task == null)
{
Console.WriteLine(++counter);
}
using (task = new Task(Method))
{
task.Start();
task.Wait();
}
// task = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
Console.ReadKey();
}
public static void Method() { }
}
我的除外输出:1 2 3 4 5 6 ...但这种方法的实际输出为1!
如果我从代码行Task = null;
删除评论,那么我将成为预期的结果。
为什么处置的任务不是空的!?我想,如果物品被丢弃,那么它们可以被设置为GC(我已经强制GC收集),换句话说,GC会收集已处置(孤立)的物体并将它们置于空?!
我发现了一个非常有用的问题链接:http://stackoverflow.com/questions/2926869/do-you-need-to-dispose-of-objects-and-set-them-to-null –