文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用 Async/Await ​编写异步代码的五个优秀实践

2024-11-30 15:58

关注

这篇文章介绍了使用 async/await 编写异步代码的 5 个最佳实践。文章中的第一个建议是在所有异步代码中使用 async/await。这样做的好处有以下几点:首先,它使代码库保持一致性。通过在所有异步代码中使用 async/await,你可以保持一致的代码编写和组织方式。此外,async/await 有助于提高代码可读性和易于维护。这是因为使用 async/await 可以使代码看起来更像同步代码,从而使其更容易理解和修改。总之,使用 async/await 是编写高效、易于维护的异步代码的关键。

下面是正文:

在这篇博客文章中,我们将讨论async/await - 一种在各种编程语言中编写异步代码的强大工具。

但首先,让我们定义async/await。简单来说,async/await是一种编写异步代码的方式,它看起来和行为像同步代码。它允许我们暂停函数的执行,等待 promise  解决,然后从离开的地方继续。

快速示例:

async function getData() {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
}

注意 fetch 和 response.json 的调用被包裹在 await 语句中。这使得函数在继续执行下一行之前暂停并等待 Promise 解决。

为什么 async/await 很重要

异步编程在当今高并发应用程序的世界中是必不可少的。无论是构建 Web 应用程序、移动应用程序还是后端服务,都有可能需要在某个时候使用 async/await。

改进的性能和可扩展性

async/await允许我们编写非阻塞代码,这意味着应用程序可以处理更多并发请求,而不会遇到性能瓶颈。

增强用户体验

async/await 可以帮助我们创建更具响应性和交互性的应用程序,从而带来更好的用户体验。

更好的代码结构和可读性

async/await 使编写干净有组织的代码更加容易,这在应用程序规模和复杂性增加时尤为重要。

提高生产力

通过简化异步编程,async/await 可以帮助我们在更短的时间内完成更多的工作。

Tips1: 对于所有异步代码,请使用 async/await

使用async/await处理所有异步代码是个好主意,原因有几个。首先,它可以促进代码库的一致性。通过使用async/await处理所有异步代码,我们将拥有一种一致的编写和组织代码的方式。这使得其他开发人员更容易理解和维护你的代码库。

async/await还可以使用 try/catch 块轻松捕获和处理错误。在处理 Promise 时,这尤其有用,因为如果没有适当的错误处理,Promise 可能很难调试。

最后,使用async/await在某些情况下可以提高性能,特别是与 await 关键字结合使用时。

以下是使用 async/await 处理所有异步代码的几个示例:

// Example 1: Using async/await with promises
async function getData() {
try {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
}
}

// Example 2: Using async/await with async/await functions
async function processData(data) {
try {
const processedData = await transformData(data);
await saveData(processedData);
} catch (error) {
console.error(error);
}
}

Tips2: 在 try/catch 块中使用 await 处理错误

处理错误是编写可靠且易于维护的代码的重要部分。在使用async/await时,最好在 try/catch 块内使用 await 关键字来正确处理错误。

下面是在 try/catch 块中使用 await 的示例:

async function getData() {
try {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
}
}

在这个例子中, fetch 和 response.json 的调用被包含在 await 语句中,位于 try 块内。如果发生错误,它将被 catch 块捕获并记录到控制台。

在 async/await 代码中,使用 try/catch 块内的 await 是处理错误的简单有效方法。

Tips3: 避免在 async/await 中使用 .then() 和 .catch()

JavaScript中通常使用 .then() 和 .catch() 方法来处理 Promise。然而,当使用async/await时,通常最好避免使用 .then() 和 .catch() ,而是使用 try/catch 块。

这是一个使用 try/catch 块而不是 .then() 和 .catch() 的示例:

async function getData() {
try {
const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
} catch (error) {
console.error(error);
}
}

Tips4:  避免使用 async  void 函数,除了事件处理程序。

Async void 函数是使用 async 关键字标记的函数。虽然在某些情况下可以使用异步无返回值函数,但通常应避免使用。示例:

async void DoWork() {
// Async code here
}

async void 函数可能会有问题,因为它们不返回值,这使得处理错误和确定函数何时完成变得困难。 通常最好使用  async Task 或  async Task 函数。这些类型的函数允许我们返回值并更轻松地处理错误。

这是一个异步任务函数的示例:

async Task DoWork() {
// Async code here
}

有一种情况可以使用 async void 函数:事件处理程序。async void 事件处理程序通常用于 UI 编程,以执行异步操作而不阻塞 UI 线程。

这是一个 async void 。

private async void Button_Click(object sender, RoutedEventArgs e) {
// Async code here
}

Tips5: 不要在没有适当考虑的情况下混合使用同步和异步代码

混合同步和异步代码可能会导致许多问题,包括性能问题、死锁和竞争条件。通常最好避免混合同步和异步代码,除非你有充分的理由这样做。

有一些情况下,混合使用同步和异步代码是可以的:

以下是从同步方法调用异步方法的示例:

public void DoWork() {
// Sync code here
await DoAsyncWork();
// Sync code here
}

public async Task DoAsyncWork() {
// Async code here
}

以下是从异步方法调用同步方法的示例:

public async Task DoAsyncWork() {
// Async code here
await Task.Run(() => DoSyncWork());
// Async code here
}

public void DoSyncWork() {
// Sync code here
}

除非有特定的原因,否则通常最好避免混合使用同步和异步代码。混合使用同步和异步代码可能会导致性能问题、死锁和竞争条件。但是,在某些情况下,有必要混合使用同步和异步代码,例如从同步方法调用异步方法或从异步方法调用同步方法。在混合使用同步和异步代码时,重要的是要正确处理错误并考虑对性能和可维护性的潜在影响。

本文转载自微信公众号「大迁世界」,可以通过以下二维码关注。转载本文请联系大迁世界公众号。

来源:大迁世界内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯