.NET C#基础教程第13天:减少死锁的可能性

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

概述:介绍本文演示了如何使用 efficient 添加无死锁异步代码。ConfigureAwait(false)学习目标如何使用代替传统的异步等待编程ConfigureAwait(false)为什么更好ConfigureAwait(false)开发人员的先决条件基本了解 C# 编程语言基本了解使用 async await 进行异步编程开始考虑一个示例,其中用户希望在方法中异步加载数据。/// summary/// Old approach with classic async await /// /summary/// returns/returnspublic async static Task

介绍

本文演示了如何使用 efficient 添加无死锁异步代码。ConfigureAwait(false)

学习目标

  • 如何使用代替传统的异步等待编程ConfigureAwait(false)
  • 为什么更好ConfigureAwait(false)

开发人员的先决条件

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

开始

考虑一个示例,其中用户希望在方法中异步加载数据。

/// <summary>
/// Old approach with classic async await 
/// </summary>
/// <returns></returns>
public async static Task OldApproach()
{
    await ReadDataAsync();
}

在这种方法中,await 运算符等待,然后在从它开始的同一同步上下文中继续执行ReadDataAsync

当开发人员确保在单独的线程中执行 UI 更新时,将使用上述方法。但是,它可能会引入潜在的死锁风险。

优化方法ConfigureAwait(false)

让我们使用ConfigureAwait(false)

/// <summary>
/// Optimized approach with ConfigureAwait
/// </summary>
/// <returns></returns>
public static async Task OptimizedApproachAsync()
{
    await ReadDataAsync().ConfigureAwait(false);
}

通过添加此内容,编译器不会在同一同步上下文中添加执行,从而减少了死锁的可能性。

上述优化在库代码等非 UI 应用程序中是有益的。

为什么更好ConfigureAwait(false)

请在下面找到使用方法的好处ConfigureAwait(false)

提高性能

由于优化的方法不会将执行添加到相同的同步上下文中,因此可以节省额外的开销,并有助于创建可扩展的应用程序。

减少死锁的可能性

ConfigureAwait(false)方法可降低同步上下文被阻止时出现死锁的风险。

结论

C# 中的方法旨在生成高效、避免死锁的异步代码。它的优点在非UI应用程序和库项目中特别有用。ConfigureAwait(false)

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

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