async / await
以下に出くわしたとき、私は遊んでいました:
class C
{
private static string str;
private static async Task<int> FooAsync()
{
str += "2";
await Task.Delay(100);
str += "4";
return 5;
}
private static void Main(string[] args)
{
str = "1";
var t = FooAsync();
str += "3";
str += t.Result; // Line X
Console.WriteLine(str);
}
}
結果は「12345」になると思っていたのですが、「1235」でした。なぜか「4」が食べ尽くされました。
行Xを次のように分割すると:
int i = t.Result;
str += i;
次に、予想される「12345」の結果が得られます。
なぜそうなのですか?(VS2012を使用)