【C#】Async、Await、HttpClient

言語いろいろやってると、毎回忘れるやーつ。
そして公開するの忘れてたw

Form1.cs

using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        // 変数を定義
        private static HttpClient client = new HttpClient();
        private static CancellationTokenSource tokenSource;

        public Form1()
        {
            InitializeComponent();
        }

        // 非同期処理を実行するボタン
        private async void button3_Click(object sender, EventArgs e)
        {
            // トークンを新しく発行
            tokenSource = new CancellationTokenSource();
            var cancelToken = tokenSource.Token;

            // 非同期処理を呼び出す
            var a = await AsyncTest(cancelToken);

            // 非同期処理の結果を表示
            MessageBox.Show(a.ToString(), "button3_Click End");
        }

        // 非同期処理をボタンイベントに全てを記述する場合
        private void button4_Click(object sender, EventArgs e)
        {
            var task = Task.Run(async () =>
            {
                await Task.Delay(1000);
                MessageBox.Show("1", "button4_Click End");
            });
        }

        // キャンセルボタン
        private void button5_Click(object sender, EventArgs e)
        {
            // キャンセルを送信
            tokenSource.Cancel();
        }

        // 非同期処理
        public async Task AsyncTest(CancellationToken cancelToken)
        {
            // 時間のかかる処理を実行
            for (int i = 0; i < 5; i++)
            {
                // 1000ミリ秒待機
                await Task.Delay(1000);

                if (cancelToken.IsCancellationRequested)
                {
                    // キャンセル終了
                    return 0;
                }
            }
            
            // 正常終了
            return 1;
        }

        public async Task AsyncHttpTest()
        {
            // HTTP通信でHTMLの内容を取得
            var response = await client.GetAsync("http://www.itcowork.co.jp/");
            // 文字型に変換
            var text = await response.Content.ReadAsStringAsync();
            return text.ToString();
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください