.NET C#基础教程第14天:限制并发异步操作

作者:微信公众号:【架构师老卢】
6-10 8:46
83

概述:介绍本文强调了限制并发异步操作的重要性,这反过来又提高了性能。学习目标所有开发人员都会犯的常见错误如何使用限制并发异步操作最佳实践开发人员的先决条件基本了解 C# 编程语言基本了解使用 async await 进行异步编程开始所有开发人员都会犯的常见错误考虑一个示例,其中用户希望在方法中异步加载数据,它突出显示了开发人员常犯的错误(async item = await ProcessItem(item));/// summary/// Old approach with classic async await /// /summary/// returns/returnspublic asyn

介绍

本文强调了限制并发异步操作的重要性,这反过来又提高了性能。

学习目标

  • 所有开发人员都会犯的常见错误
  • 如何使用限制并发异步操作
  • 最佳实践

开发人员的先决条件

  • 基本了解 C# 编程语言
  • 基本了解使用 async await 进行异步编程

开始

所有开发人员都会犯的常见错误

考虑一个示例,其中用户希望在方法中异步加载数据,它突出显示了开发人员常犯的错误

(async item => await ProcessItem(item));
/// <summary>
/// Old approach with classic async await 
/// </summary>
/// <returns></returns>
public async static Task OldApproach(List<string> items)
{
    var tasks = items.Select(async item => await ProcessItem(item));
    await Task.WhenAll(tasks);
}

该方法可能看起来简洁明了,但它同时为集合中的每个项目启动任务。这可能会导致系统承受重压,从而产生较差的应用程序性能。List<string> items

优化方法Concurrency Limit

让我们转换上面的方法,用于限制并发异步操作的数量。以下代码片段演示了更精细的方法。SemaphoreSlim

/// <summary>
/// Optimized approach with limit concurrency
/// </summary>
/// <returns></returns>
public static async Task OptimizedApproachAsync(List<string> items, int maxConcurrency = 10)
{
    using (var semaphore = new SemaphoreSlim(maxConcurrency))
    {
        var tasks = items.Select(async item =>
        {
            await semaphore.WaitAsync(); // Limit concurrency by waiting for the semaphore.
            try
            {
                await ProcessItem(item);
            }
            finally
            {
                semaphore.Release(); // Release the semaphore to allow other operations.
            }
        });

        await Task.WhenAll(tasks);
    }
}

上述代码可防止系统因过多的并发任务而窒息。

最佳实践

请在下面找到最佳实践

限制并发

为了平衡系统负载和资源,建议使用SemaphoreSlim

避免阻止呼叫

避免使用 OR,因为它们会导致死锁并降低性能。.Result.Wait()

一路异步

避免混合异步和同步代码,确保所有方法从上到下都是异步的,以防止死锁并充分利用资源。

结论

C# 中的异步编程不仅涉及理解 and 关键字;它需要更多的功能,如并发性、资源利用率和代码结构asyncawait

源代码获取:公众号回复消息【code:27858

相关代码下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送code:27858,如:code:27858 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧
阅读排行