自分の知識の整理とメモを含めて書きます
C#の非同期処理はTask.Run()
C#で処理を非同期的に実行するには、Task.Run
を使う
コード:(こちらを参考にしています)
using System;
using System.Threading;
using System.Threading.Tasks;
class Sample{
public static async void Test()
{
var a = Task.Run(() =>{ // 非同期処理
int i = 0;
while(i <= 10){
Console.WriteLine(i);
i++;
Thread.Sleep(1000);
}
}); // 終わり
while(!a.IsCompleted){ // 非同期処理が終了するまでループ
Console.WriteLine("処理中...");
Thread.Sleep(1500);
}
Console.WriteLine("処理が終了しました");
}
}
class Program {
public static void Main (string[] args) {
Sample.Test();
}
}
わかりやすく解説していきます
まず、var a = Task.Run(() =>{}
の部分ですね
これがミソです。
C#は、Task.Run(() => {})
のかぎ括弧の中を非同期として処理してくれます。
C#大好き。こんな簡単に非同期処理できちゃう
つまり、どういうことかと言うと、今回のコードの場合は、
int i = 0;
while(i <= 10){
Console.WriteLine(i);
i++;
Thread.Sleep(1000);
}
の部分を非同期に処理してくれるわけです。
今回のコードを実行すると、こんな感じになると思います(実行環境はReplit)
はい、出来ていますね。
ちゃんとカウントが非同期で動いています
でも気をつけてほしいのが、非同期処理中に実行する物がなかったらそのまま非同期処理をせずに実行が終了するということです
私はそれで一日を無駄にしました...いやほんとぼーっとしてたんです
というわけで非同期処理の話でした