Поскольку в Гугл+ так и не нашлось объяснения странного поведения приведенного там кода, то я решил рассказать об этом более подробно.
Итак, вопрос заключается в следующем: что мы ожидаем увидеть при исполнении следующего кода и что мы увидим на самом деле?
class CrazyType
{
public static readonly int Foo = GetFoo();
private static int GetFoo()
{
return Task.Run(() => 42).Result;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main method get called!");
Console.WriteLine(CrazyType.Foo);
}
}