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)
実行結果:
みんなが気づいたのか、中のThreadIdは一致していた.
注意しなければならないのは、asyncを追加するのではなく、非同期です(awaitメソッドを呼び出す必要があります)、例えば、以下は実際に同期して実行されます.
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();
}
}
}
実行結果:
みんなが気づいたのか、中の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();
}