目次
C# async await 非同期処理の使い方
C# 5.0から、async, await という便利な非同期処理が追加されました。
簡単な使い方は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Threading.Tasks; using System.Threading; namespace async { class Program { static async Task HelloWorldAsync() { Console.WriteLine("[Async] HelloWorldAsync Start...\n"); await Task.Run(() => { Console.WriteLine("[Async] 1"); Thread.Sleep(1000); Console.WriteLine("[Async] 2"); Thread.Sleep(1000); Console.WriteLine("[Async] 3"); Thread.Sleep(1000); }); Console.WriteLine("[Async] HelloWorldAsync End...\n"); } static void Main(string[] args) { Console.WriteLine("[Main] Start...\n"); Task task = HelloWorldAsync(); Console.WriteLine("[Main] HelloWorldAsync Called...\n"); task.Wait(); Console.WriteLine("[Main] End...\n"); while (true) ; } } } |
実行結果は次の通りです。
[Main] Start...
[Async] HelloWorldAsync Start... [Async] 1 [Main] HelloWorldAsync Called... [Async] 2 [Async] 3 [Async] HelloWorldAsync End... [Main] End...
.NET Framework 4.0では非同期 async awaitが使えない?
ところで、Visual Studio 2010で、上記のサンプルプログラムを実行しようとしてソースコードを書いてみると以下のエラーが出ました。
型または名前空間 async が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
????
理由が分からないので調べてみました。
Stack Overflowに以下の通り、答えが載っていました。
You need to be using a C# 5 compiler, e.g. VS2012. If you're using VS2010, you can't use async. Given the error message, I suspect that you're using the wrong compiler version.
Visual Studio 2010 (.NET Framework 4.0) は、C# 4なので、async awaitの非同期処理は使えません。
Visual Studio 2012 (.NET Framework 4.5) は、C# 5なので、async awaitの非同期処理が使えるようになります。
なんだ、そういうことか。
.NET Framework 4.0ならMicrosoft Asyncを使う
Visual Studio 2010 (.NET Framework 4.0) で、async await 非同期処理を使うには、nugetでMicrosoft Asyncというパッケージをインストールします。
詳しくは以下に記載されていました。
Using async-await on .net
コメント