maemaewaterの日記

エンジニア兼ゲーマーの人の日記です。PHP/Python/JavaScript/C#/C++などによるプログラムに関することを主に書いています。

C#: コンソールアプリケーションでasyncを利用

Windows 8用のアプリケーション等ではasyncのメソッドのみになっていたりするのですが、コンソールアプリケーションでasycを利用する時にはMainにasyncはつけられないのですが、Task.Factory.StartNewを使用すると大丈夫です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            Task task = Task.Factory.StartNew(async () =>
            {
                String data = await HttpRequest("http://.../");

                Console.WriteLine(data);
                
            }).Unwrap();

            task.Wait();

            Console.WriteLine("読み込み完了!");
        }

        static private async Task<String> HttpRequest(string url)
        { 
            HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(url);

            string text = "";
            WebResponse response = null;

            try
            {
                response = await request.GetResponseAsync();

                var stream = response.GetResponseStream();
                var reader = new StreamReader(stream);

                text = await reader.ReadToEndAsync();
            }
            catch (WebException e)
            {
                Console.WriteLine(e.ToString());     
            }

            return text;
        }
    }
}

asyncを利用した一部の機能を利用する時などに便利なのかなと思っています。