C#async await学習ノート1

6548 ワード

私の開発ツールはvs.net 2010(.net 4.0)なので、以下の2つのステップを先に行う必要があります.
1.Async CTPのダウンロードとインストール(http://www.microsoft.com/en-us/download/details.aspx?id=9983)
2.AsyncCtpLibraryを追加する.dllの引用、私はwin 7を使っています(C:UsersAdministratorDocumentsMicrosoft Visual Studio Async CTPSamples)
 
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Threading;



namespace ConsoleApplication1

{

    class Program

    {

        static Task<string> LongTimeTask()

        {          

            Console.WriteLine("LongTimeTask  :" + DateTime.Now.ToString() + "  ThreadId:" + Thread.CurrentThread.ManagedThreadId);



            Task<string> task = new Task<string>(() => { Thread.Sleep(5000); return "       "; });

            task.Start();



            Console.WriteLine("LongTimeTask  :" + DateTime.Now.ToString());



            return task;

        }



        static async void AsyncCall()

        {

            Console.WriteLine("AsyncCall  :" + DateTime.Now.ToString() + "  ThreadId:" + Thread.CurrentThread.ManagedThreadId);



            string result = await LongTimeTask(); //await         Task Task<T>,   await       async   

            Console.WriteLine("AsyncCall:" + result);



            Console.WriteLine("AsyncCall  :" + DateTime.Now.ToString());

        }   



        static void Main(string[] args)

        {

            Console.WriteLine("Main  :" + DateTime.Now.ToString() + "  ThreadId:" +Thread.CurrentThread.ManagedThreadId);

            AsyncCall();   

            Console.WriteLine("Main  :" + DateTime.Now.ToString());      

            Console.ReadLine();

        }

    }

}

 
実行結果:
C# async await 学习笔记1
みんなが気づいたのか、中のThreadIdは一致していた.
 
注意しなければならないのは、asyncを追加するのではなく、非同期です(awaitメソッドを呼び出す必要があります)、例えば、以下は実際に同期して実行されます.
 static async void SyncCall()

        {

            Thread.Sleep(5000);

        }



        static void Main(string[] args)

        {

            Console.WriteLine("Main  :" + DateTime.Now.ToString());

            // AsyncCall();

            SyncCall();

            Console.WriteLine("Main  :" + DateTime.Now.ToString());



            Console.ReadLine();

        }