スレッドとタスクの違い
パラメータも戻り値も持たないスレッド: 実行効果は一貫しています
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SD_ZB_mqtt
{
internal class Program
{
static void Main(string[] args)
{
Test();
Console.ReadKey();
}
static void Test()
{
Thread task1 = new Thread(() =>
{
Thread.Sleep(1000*1);
Console.WriteLine("1s");
});
Thread task2 = new Thread(() =>
{
Thread.Sleep(1000 * 2);
Console.WriteLine("2s");
});
Thread task3 = new Thread(() =>
{
Thread.Sleep(1000 * 3);
Console.WriteLine("3s");
});
Thread task4 = new Thread(() =>
{
Thread.Sleep(1000 * 4);
Console.WriteLine("4s");
});
task4.Start();
task3.Start();
task2.Start();
task1.Start();
//打印1,2,3,4
}
}
}
internal class Program
{
static void Main(string[] args)
{
Test();
Console.ReadKey();
}
static void Test()
{
Task task1 = new Task(() =>
{
Thread.Sleep(1000*1);
Console.WriteLine("1s");
});
Task task2 = new Task(() =>
{
Thread.Sleep(1000 * 2);
Console.WriteLine("2s");
});
Task task3 = new Task(() =>
{
Thread.Sleep(1000 * 3);
Console.WriteLine("3s");
});
Task task4 = new Task(() =>
{
Thread.Sleep(1000 * 4);
Console.WriteLine("4s");
});
task4.Start();
task3.Start();
task2.Start();
task1.Start();
//打印1,2,3,4
}
引数なし構築の一貫した実行順序
パラメータあり / 戻り値あり:
知らせ, スレッドとタスクの両方でラムダ記述を使用してパラメータの受け渡しの問題を解決できます。
Thread thread1 = new Thread(()=>print("测试"));
Task thread1 = new Task(()=>print("测试"));
スレッドはパラメータを受け取ります。
オブジェクトを使用する必要があります。使用しない場合、エラーが報告されます。また、Thread にはパラメータ メソッドが 1 つしかないため、複数のパラメータを渡したい場合は、最初にクラスを宣言してクラスに渡すしかありません。
internal class Program
{
static void Main(string[] args)
{
Test();
Console.ReadKey();
}
public static void Test()
{
Thread thread1 = new Thread(new ParameterizedThreadStart(print));
thread1.Start("a");
}
public static void print(object msg)
{
Thread.Sleep(1000);
Console.WriteLine(msg);
}
}
スレッドには戻り値がありません
戻り値を追加すると、戻り値の型が間違っているというエラーが報告されます。他のブログで紹介されている方法は、委任を使用してブロックし、スレッドが完了するまで待つことです。