C# 5.0 async await

単純なコンソールアプリをこんなふうに書くと、

    class Program
    {
        static void Main(string[] args)
        {
            FuncAsync();
            Console.ReadLine();
        }

        static async void FuncAsync()
        {
            WriteLine("FuncAsync()Begin");
            int r = await Task.Run<int>(() => Worker());
            WriteLine("FuncAsync()End");
        }

        static int Worker()
        {
            WriteLine("Worker()");
            return 99;
        }

        static void WriteLine(string msg)
        {
            Console.WriteLine(msg + " Thread=" + Thread.CurrentThread.ManagedThreadId);
        }
    }

実行結果はこうなる。

FuncAsync()Begin Thread=1
Worker() Thread=3
FuncAsync()End Thread=3

FuncAsync()メソッドが、awaitをはさんで、違うスレッドで実行されます。
まあasync/awaitの仕組みからしてこうなることもわかるのですが、正直ちょっと気持ち悪い感じだぞ。