首頁 >後端開發 >C++ >如何在 C# 中正確使用 Async 和 ForEach?

如何在 C# 中正確使用 Async 和 ForEach?

Linda Hamilton
Linda Hamilton原創
2025-01-05 03:05:40666瀏覽

How to Correctly Use Async with ForEach in C#?

在 C# 中將 Async 與 ForEach 結合使用

將 ForEach 方法用於非同步操作時,了解其局限性非常重要。在您的程式碼中:

db.Groups.ToList().ForEach(i => async {
    await GetAdminsFromGroup(i.Gid);
});

您遇到的編譯器錯誤“當前上下文中不存在名稱‘Async’”,表示您不能直接在非非同步 lambda 表達式中使用 async。

解決方案:

要解決此問題,請將每個元素投影到非同步操作中並等待全部完成:

using (DataContext db = new DataLayer.DataContext())
{
    var tasks = db.Groups.ToList().Select(i => GetAdminsFromGroupAsync(i.Gid));
    var results = await Task.WhenAll(tasks);
}

這種方法的好處:

  • 正確的錯誤處理: async void 的異常不能被捕獲,但此方法將它們傳播到等待Task.WhenAll 行,允許自然異常
  • 完成跟踪:這種方法清楚地指示操作何時完成,與async void 不同,這使得這種差異難以追蹤。
  • 自然語法: GetAdminsFromGroupAsync 暗示操作傳回結果,使程式碼更直覺且可維護。

以上是如何在 C# 中正確使用 Async 和 ForEach?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn