成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 遍歷方法全對比:`Parallel.ForEach`、`List.ForEach`、`foreach` 到底怎么選?

開發(fā) 前端
遍歷集合是 C# 程序員天天要干的事。數(shù)據(jù)多了、邏輯復雜了,性能、異步、并發(fā)就統(tǒng)統(tǒng)成了問題。C# 提供了幾種不同的遍歷方式,各有優(yōu)缺點,今天我們來用真實代碼和具體場景,一次講清楚:

遍歷集合是 C# 程序員天天要干的事。數(shù)據(jù)多了、邏輯復雜了,性能、異步、并發(fā)就統(tǒng)統(tǒng)成了問題。C# 提供了幾種不同的遍歷方式,各有優(yōu)缺點,今天我們來用真實代碼和具體場景,一次講清楚:

  • Parallel.ForEach 和 Parallel.ForEachAsync
  • List<T>.ForEach
  • foreach(包括配合異步方法)

1. Parallel.ForEach:多線程并發(fā)執(zhí)行,性能猛獸

當你有大量數(shù)據(jù)需要同時處理,而且每個處理之間沒有依賴關(guān)系,用 Parallel.ForEach 能顯著提升性能。

Parallel.ForEach(myList, item =>
{
    ProcessHeavy(item); // 耗時的同步任務
});

這個方法會自動幫你分配線程池中的線程去并發(fā)執(zhí)行任務。唯一要注意的是,它不保證順序,多個任務是同時跑的。如果你訪問了共享資源(比如同一個文件、變量),就要手動加鎖或用線程安全的方式處理。

.NET 6 起還支持異步版本:

await Parallel.ForEachAsync(myList, async (item, token) =>
{
    await ProcessAsync(item); // 異步耗時任務,如 HTTP 請求
});

這個非常適合需要同時跑多個異步請求,比如發(fā)起 100 個 API 調(diào)用、同時上傳一堆文件等。

適合場景:

  • 并發(fā)執(zhí)行沒有順序依賴的任務
  • 大批量數(shù)據(jù)處理
  • 高性能需求場景,如后臺服務、圖像處理等

2. List<T>.ForEach:優(yōu)雅簡潔,但局限也多

很多人說的 “Enumerable.ForEach” 其實并不存在,真正的是 List<T>.ForEach 方法。它是 List 自帶的實例方法,不是 LINQ 擴展。

var list = new List<int> { 1, 2, 3 };
list.ForEach(item => Console.WriteLine(item));

看起來非常簡潔,適合快速寫小腳本或者 UI 層的簡單邏輯處理。但它只支持 List 類型,而且不能用于異步操作。你要是這樣寫:

list.ForEach(async item => await DoSomethingAsync(item)); // 錯誤寫法!

這段代碼會變成 async void,出了錯都捕不到,調(diào)試困難,不建議這樣使用。

適合場景:

  • 小數(shù)據(jù)量操作
  • 不涉及異步或并發(fā)的邏輯
  • 代碼潔癖患者追求簡短寫法

3. foreach + async:穩(wěn)妥靠譜,順序清晰

最經(jīng)典的寫法仍然是 foreach,它的好處是穩(wěn)。你可以明確知道順序、執(zhí)行時機、異常處理,配合異步也很好用。

foreach (var item in myList)
{
    await DoSomethingAsync(item); // 一個個執(zhí)行
}

雖然不能并發(fā),但非常適合對順序敏感的場景,比如依次寫數(shù)據(jù)庫、依次上傳文件、依次記錄日志等。

.NET 還支持 await foreach 遍歷異步流,比如從數(shù)據(jù)庫流式讀取數(shù)據(jù):

await foreach (var row in GetDataAsync())
{
    Console.WriteLine(row);
}

這類寫法適合消息隊列、數(shù)據(jù)庫分頁加載、SignalR 等場景。

適合場景:

  • 需要確保執(zhí)行順序
  • 異步操作逐個進行,穩(wěn)定性優(yōu)先
  • 可配合異步流讀取大數(shù)據(jù)量

4. 對比總結(jié)表

遍歷方式

是否支持并發(fā)

是否支持異步

順序是否保證

支持的集合類型

推薦使用場景

Parallel.ForEach

?

?

?

所有 IEnumerable

并行處理 CPU 密集型任務

Parallel.ForEachAsync

?

?

?

所有 IEnumerable

并發(fā)處理異步任務(如接口、I/O)

List<T>.ForEach

?

?(?不支持)

?

僅限 List<T>

小量數(shù)據(jù)處理,語法簡潔

foreach + await

?

?

?

所有 IEnumerable

順序異步執(zhí)行,控制清晰

await foreach

(異步流)

?

?

?

異步可枚舉對象

異步流處理,如數(shù)據(jù)庫流、消息流等

結(jié)語

  • 如果你任務之間沒啥依賴,又想快, 并發(fā)用 Parallel.ForEach 或 Parallel.ForEachAsync 。
  • 如果只是小腳本、小功能,List<T>.ForEach 最舒服,但別寫異步邏輯進去。
  • 如果你想代碼靠譜、不出事,特別是對順序敏感的異步操作,還是老老實實用 foreach + await。
責任編輯:武曉燕 來源: DotNet開發(fā)跳槽
相關(guān)推薦

2021-11-30 00:12:43

C#多線程循環(huán)

2009-05-11 10:40:36

.NETLINQforeach

2010-03-19 13:17:26

Parallel

2009-08-28 17:18:55

foreach循環(huán)

2009-07-31 18:39:31

C#中foreach引

2020-10-16 08:30:00

foreach編程語言C#

2021-03-29 12:01:00

遍歷數(shù)組for循環(huán)

2016-08-05 14:48:00

javascripthtml前端

2009-08-27 09:49:10

C# foreach語

2009-08-27 10:33:28

C# foreach

2022-09-07 11:52:48

forforEach前端

2009-09-08 11:25:42

Linq foreac

2010-07-13 13:49:43

Perl foreac

2009-08-27 11:27:58

foreach語句C# foreach語

2024-05-29 09:13:37

2009-08-27 10:20:03

C# foreach語

2009-08-27 11:12:04

C# foreach

2024-02-23 09:36:57

C#工具并行處理

2010-07-26 15:27:50

Perl foreac

2024-08-30 08:43:24

JavaScriptforEachfor循環(huán)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 97色综合 | 欧美视频在线播放 | 精品1区| 欧美色偷拍| 国产精品爱久久久久久久 | 日本一区二区三区四区 | 最新日韩av | 精品国产三级 | 欧美亚洲激情 | 国产精品视频一区二区三区 | 激情一区二区三区 | 久久久久久久久久久福利观看 | 人人干免费 | 亚洲国产成人精品女人久久久 | 国产精品色 | 色婷婷精品国产一区二区三区 | 国产精品一级 | 国产精品日日做人人爱 | 最新国产精品精品视频 | 午夜三区| 国产精品久久久久无码av | 二区在线视频 | 日韩在线 | 一级a性色生活片久久毛片波多野 | 亚洲成人av | 一级做a爰片性色毛片16美国 | 国产精品一级在线观看 | 人人操日日干 | 一级黄色短片 | 欧美一级在线 | 国产免费一区二区 | 九九热在线视频 | 国产中的精品av涩差av | 日本三级电影免费 | 一级看片免费视频囗交动图 | 久久亚洲一区二区三区四区 | 欧美一级观看 | 欧美三级三级三级爽爽爽 | 日本三级网址 | 在线看av网址 | 欧美黑人体内she精在线观看 |