日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中你想象的Task,很简单?

發布時間:2023/12/4 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中你想象的Task,很简单? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【導讀】網上關于Task的文章如數家珍,不過有一部分并未談到一個根本的問題,所創建的Task一定在線程池上運行?如何合理的使用Task?

這里并不會去重新講解每一個APi的使用,沒有任何意義,這屬于包括我在內的各位童鞋們都必須要了解的基礎前提。這里我對其作出基本總結以及使用Task時需要注意的地方

Thread與Task區別

  • 任務可以返回結果,沒有直接的機制可以從線程返回結果。

  • 任務通過使用取消令牌來支持取消,但是線程沒有。

  • 一個任務可以同時執行多個線程,線程一次只能運行一個任務。

  • 可以使用async和await關鍵字輕松實現異步。

  • 新的Thread不處理線程池線程,而Task確實使用線程池線程。

  • 任務是比線程更高層次的概念。

  • Task

    .NET框架提供Threading.Tasks類,我們可以創建任務并異步運行它們,任務是代表應該完成的某些工作的對象。該任務可以告訴我們工作是否完成,并且操作返回結果,那么任務將為我們提供結果。

    深入思考Task

    Thread是基于操作系統級別的線程,而ThreadPool和Task不會創建自己的操作系統線程,二者是由任務調度器(TaskScheduler)執行,默認的調度程序僅僅在ThreadPool上運行,與ThreadPool不同,Task可以在指定時間返回完成結果,并且還可以通過ContinueWith延續任務,以使得任務執行完畢后運行更多操作,如果已完成立即進行回調,也可以調用Wait來同步等待任務完成,如同Thread.Join一樣阻塞線程執行,直到任務完成

    重點來了

    由于任務在ThreadPool上運行,因此創建不加任何選項的默認Task并不適用于執行長時間的操作,因為它們可能會將系統默認的線程池給填滿導致其他操作的線程阻塞,但是Task提供了LongRunning選項,設置此項后,告訴任務調度器(TaskScheduler)啟動新的線程,而不是在ThreadPool上運行

    var?task?=?Task.Factory.StartNew(()?=>?("Hello?World"),?TaskCreationOptions.LongRunning);Console.WriteLine(task.Result);

    任務和線程之間的最主要區別之一是異常的傳播。在使用線程時,如果我們在長時間運行的方法中獲得異常,則不可能在父函數中捕獲該異常,但是如果我們在使用任務,則很容易捕獲該異常。

    總結

    以上是生活随笔為你收集整理的C#中你想象的Task,很简单?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。