C#多線程編程のTask(任務)

來源:互聯網
上載者:User

標籤:任務   src   png   編程   輸出   component   return   loaded   img   

Task是.NET4.5加入的,跟線程池ThreadPool的功能類似,用Task開啟新任務時,會從線程池中調用線程,而Thread每次執行個體化都會建立一個新的線程。

 

長耗時操作是不是常用 await Task.Run( )?

 

看下面代碼:

namespace WpfApplication6{    /// <summary>    /// MainWindow.xaml 的互動邏輯    /// </summary>    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            ConsoleManager.Show();//開啟控制台視窗          }        private void Window_Loaded(object sender, RoutedEventArgs e)        {            Console.WriteLine("主線程啟動");            Task task = Task.Run(() => {                Thread.Sleep(1500);                Console.WriteLine("task啟動");            });            Thread.Sleep(300);            task.Wait();            Console.WriteLine("主線程結束");        }    }}

  

結果:

分析:

開啟新任務的方法:Task.Run()或者Task.Factory.StartNew(),開啟的是後台線程

要在主線程中等待後台線程執行完畢,可以使用Wait方法(會以同步的方式來執行)。不用Wait則會以非同步方式來執行。

thread和Task的區別,thread new多少個就會建立多少個線程,而task是利用線程池中的線程。

 

task<TResult>就是有傳回值的Task,TResult就是傳回值類型。樣本:

        private void Window_Loaded(object sender, RoutedEventArgs e)        {            Console.WriteLine("主線程開始");            //傳回值類型為string            Task<string> task = Task<string>.Run(() => {                Thread.Sleep(2000);                return Thread.CurrentThread.ManagedThreadId.ToString();            });            //會等到task執行完畢才會輸出;            Console.WriteLine(task.Result);            Console.WriteLine("主線程結束");        }

 

通過task.Result可以取到傳回值,若取值的時候,後台線程還沒執行完,則會等待其執行完畢!

簡單提一下:

Task任務可以通過CancellationTokenSource類來取消。

 

 

C#多線程編程のTask(任務)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.