如果我运行以下(当然是人为的)程序(VS2015,.NET4.6):
class Program
{
static void Main(string[] args)
{
TestTaskAsync(null).Wait();
TestTask(null);
}
public static async Task TestTaskAsync(
EqualityComparer<int> comparer)
{
comparer = EqualityComparer<int>.Default;
if (comparer == null)
{
Console.WriteLine("comparer is null");
}
Func<int, bool> func = i => comparer.Equals(i, 0);
}
public static Task TestTask(
EqualityComparer<int> comparer)
{
comparer = EqualityComparer<int>.Default;
if (comparer == null)
{
Console.WriteLine("comparer is null");
}
Func<int, bool> func = i => comparer.Equals(i, 0);
return Task.CompletedTask;
}
}
然后程序完全按照我的预期进行 - 即它不会向控制台打印任何内容。
但是,在调试时,调试器告诉我comparer
在没有调试时为空。
请注意以下事项:
if
块。comparer
为空,即使它没有输入if块。 comparer == null
永远不会成真。我认为这是正确的。async
。最后,如果我删除该行
Func<int, bool> func = i => comparer.Equals(i, 0);
然后问题就消失了。
(注意:上述程序的目的是说明我在代码中实际执行某些操作的问题。实际上,该程序实际上不会做任何事情。)
问题: 有谁知道这里发生了什么?