多线程、异步、同步的简单示例

花了半天整理了多线程、异步、同步相关的几个对象

Thread 
创建一个线程进行多线程工作
Thread t new Thread(new ThreadStart(() => { Console.WriteLine("T"); }));
t.Start();

ThreadPool
把线程托管到.NET线程池中,减少了线程创建的开销
ThreadPool.QueueUserWorkItem((objState) => { Console.WriteLine(objState.ToString()); }, "a");

BackgroundWorker 
把线程托管到内部线程池,并且提供了信息进度反馈的能力
BackgroundWorker b new BackgroundWorker();
b.WorkerReportsProgress true;
b.DoWork += (s, e) => {
    for (int i = 1; i < 100; i++)
    {
        b.ReportProgress(i);
        Thread.Sleep(100);
    }
};
b.ProgressChanged += (s, e) => { Console.WriteLine(e.ProgressPercentage.ToString()); };
b.RunWorkerAsync();

Task
增强了ThreadPool的能力,支持线程停止,状态返回、线程等待
CancellationTokenSource cts new CancellationTokenSource();
Task t new Task((ct) =>
{
    while (!((CancellationTokenSource)ct).IsCancellationRequested)
    {
        Console.WriteLine(DateTime.Now.ToString());
        Thread.Sleep(200);
    }
    return;
},cts);
Console.WriteLine("Begin");
t.Start();
t.ContinueWith((s) =>
{
    Console.WriteLine("End");
});
//await a.ConfigureAwait(false);//支持线程等待
Console.Read();
cts.Cancel();
Console.Read();

Parallel
简化同步状态下Task的使用,多余多个任务同步状态下并行执行提供帮助
List<int> nums = new List<int>() { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
Parallel.ForEach(nums, (i) => { Console.WriteLine(i.ToString()); });

Parallel.Invoke(() =>
{
    Console.WriteLine("Begin");
    Thread.Sleep(2000);
    Console.WriteLine("End");
},
() =>{
    Console.WriteLine("Begin");
    Thread.Sleep(2000);
    Console.WriteLine("End");
});

PLinq
Parallel方式在Linq下的实现
List<int> nums = new List<int>() { 12345678910111213141516 };
nums.AsParallel().ForAll((x) => { Console.WriteLine(x.ToString()); });

async  await
用同步的编程方式编写异步代码,主要用于解决一部代码编写代码臃肿的情况,异步执行的Task被他用await等待同步执行
public async static void  AA()
{
    for (int i = 0; i < 100; i++)
    {
        int i2 = await Sleep(i);
        Console.WriteLine(i.ToString());
    }
}
 
public static Task<int> Sleep(int i)
{
    var t= new Task<int>(() =>
    {
        Thread.Sleep(1000);
        return i * i;
    });
    t.Start();
    return t;
}
原文地址:https://www.cnblogs.com/CR-Soft/p/3195714.html