次のコードサンプルがあります。
class Program
{
static void Main(string[] args)
{
var a = true;
Task t = Task.Factory.StartNew(() =>
{
a = getBoolean();
});
Task.Factory.StartNew(() =>
{
Console.ReadLine();
});
while (!t.IsCompleted)
{
//Console.WriteLine("initial : a = {0}", a);
}
if (a == true)
{
Console.WriteLine("From system a = {0}", true);
}
else
{
Console.WriteLine("From system a = {0}", false);
}
}
public static bool getBoolean()
{
Task<bool> a = DelayTask();
bool r = a.Result;
a.Dispose();
return r;
}
public static Task<bool> DelayTask()
{
return Task.Factory.StartNew<bool>(() =>
{
Thread.Sleep(30000);
return false;
});
}
}
このコードを実行すると、ウィンドウは自動的に停止します。(ラップトップの電源ボタンを押す必要があります)。この問題を再現するのを手伝ってくれて、なぜこれが起こるのか説明してくれませんか。