C#的Task异步执行任务相对于Thread多线程可以更好的利用CPU资源,更高的工作效率。适用于不需要排序的高并发作业。
可以更高效的利用硬件资源。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 异步
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //new Task  =  创建任务,不执行,需要用 .Start() 来启动任务
            //Task.Factory.StartNew =   创建任务,并启动任务
            //Task.Run  =   把任务投递到线程池中去执行
   
            var t1 = new Task(() => TaskMethod("Task 1"));
            var t2 = new Task(() => TaskMethod("Task 2"));
            t2.Start();//启动任务
            t1.Start();//启动任务
            Task.WaitAll(t1, t2);//等待指定任务执行完毕
            Task.Run(() => TaskMethod("Task 3"));//抛出线程后继续向下执行,线程自己去找自己的位置执行
            Task.Factory.StartNew(() => TaskMethod("Task 4"));// 创建任务,并启动任务
            //标记为长时间运行任务,则任务不会使用线程池,而在单独的线程中运行,不和其他线程排队了,自己干自己的。
            Task.Factory.StartNew(() => TaskMethod("Task 5"), TaskCreationOptions.LongRunning);
            #region 常规的使用方式
            Console.WriteLine("主线程执行业务处理.");
            //创建任务
            Task task = new Task(() =>
            {
                Console.WriteLine("使用System.Threading.Tasks.Task执行异步操作.");
                for (int i = 0; i < 10; i++)
                {
                    Console.WriteLine(i);
                }
            });
            task.Start();//启动任务,并安排到当前任务队列线程中执行任务(System.Threading.Tasks.TaskScheduler)
            Console.WriteLine("主线程执行其他处理");
            task.Wait();//等待任务执行完毕。
            #endregion
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        static void TaskMethod(string name)
        {
            Console.WriteLine("任务 {0} 在线程 {1} 上运行. 是否为线程池: {2}",
                name, Thread.CurrentThread.ManagedThreadId, Thread.CurrentThread.IsThreadPoolThread);
        }
        private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 1000; i++)
            {
                //Task.Run(() => TaskMethod("Task " + i.ToString()));//i++不会等待线程执行,会自顾自的一直+,所以线程中显示的数字都是 10
                string t = i.ToString();//将I赋值到其他变量然后在传递给任务就显示正常的数字了
                Task.Run(() => TaskMethod("Task " + t));
            }
        }
    }
}
 万捷博客
万捷博客
![C# Task异步多任务[C#源码]](http://blog.wjsrs.com/content/templates/FYS/images/random/1.jpg) 
	 
		