async 和 await 的基本用法 代码

本文介绍了一个使用 async/await 进行异步编程的例子,并展示了如何通过 try/catch 结构来捕获并处理可能发生的错误,确保程序的稳定运行。

 a();

    async function a() {

        // await  及 其以后的代码 都是 异步执行的

        let aa = await getP(60)

        let bb = await getP(70)

        console.log(aa);

        console.log(bb);

        //当我们知道这个代码  有可能报错的时候  我们就可以用 try catch  来进行 错误的捕捉 以防止 程序崩溃

        try {

            let cc = await getP(25)

            console.log(cc);

        } catch (error) {

            console.log(error);

        }

    }

    console.log(a());  //async   会将函数  变成promise对象

    function getP(point) {

        return new Promise((reslove, reject) => {

            if (point >= 60) {

                reslove('恭喜及格..') //我们通过reslove  就可以将  成功的结果  作为promise的结果返回出去

            } else {

                reject('重修!')  //我们通过  reject  就可以将错误的结果 作为 promise的返回值  返回出去

            }

        })

    }

 a();
    async function a() {
        // await  及 其以后的代码 都是 异步执行的 
        let aa = await getP(60)
        let bb = await getP(70)
        console.log(aa);
        console.log(bb);
        //当我们知道这个代码  有可能报错的时候  我们就可以用 try catch  来进行 错误的捕捉 以防止 程序崩溃
        try {
            let cc = await getP(25)
            console.log(cc);
        } catch (error) {
            console.log(error);
        }
    }
    console.log(a());  //async   会将函数  变成promise对象

    function getP(point) {
        return new Promise((reslove, reject) => {
            if (point >= 60) {
                reslove('恭喜及格..') //我们通过reslove  就可以将  成功的结果  作为promise的结果返回出去
            } else {
                reject('重修!')  //我们通过  reject  就可以将错误的结果 作为 promise的返回值  返回出去
            }
        })
    }

### Async Await基本用法 `async` `await` 是现代编程语言中用于处理异步操作的关键字组合。它们的主要目的是简化异步代码的编写阅读体验,使异步逻辑看起来更像同步代码。 #### 关键概念 - **Async 方法**:通过在方法前加上 `async` 关键字声明该方法是一个异步方法。它返回的任务对象表示异步操作的状态。 - **Await 表达式**:在一个异步方法内部使用 `await` 来暂停执行,直到等待的操作完成[^1]。 以下是关于如何正确使用 `async` `await` 的具体示例: --- ### 示例 1: 基础异步方法 下面展示了一个简单的异步方法实现及其调用方式: ```csharp public class DataFetcher { // 定义一个模拟网络请求的方法 public async Task<string> FetchDataAsync(string url) { // 模拟耗时操作(例如网络请求) await Task.Delay(5000); // 等待 5 秒钟 return "Response from server"; } } // 主程序入口 public class Program { public static async Task Main() { var fetcher = new DataFetcher(); Console.WriteLine("Starting asynchronous operation..."); string result = await fetcher.FetchDataAsync("https://example.com"); Console.WriteLine($"Operation completed with result: {result}"); } } ``` 在这个例子中,`FetchDataAsync` 是一个异步方法,在其中使用了 `Task.Delay` 模拟耗时操作。当调用此方法时,主线程不会被阻塞,而是继续运行其他任务[^1]。 --- ### 示例 2: 并发异步操作 如果需要并发执行多个异步任务,则可以利用 `Task.WhenAll` 或者类似的机制来优化性能: ```csharp public class ConcurrentTasksExample { public async Task ExecuteMultipleRequestsAsync(List<string> urls) { List<Task<string>> tasks = new List<Task<string>>(); foreach (var url in urls) { tasks.Add(FetchDataAsync(url)); } // 等待所有任务完成 string[] results = await Task.WhenAll(tasks); foreach (var result in results) { Console.WriteLine(result); } } private async Task<string> FetchDataAsync(string url) { await Task.Delay(2000); // 模拟网络延迟 return $"Fetched data from {url}"; } } public class Program { public static async Task Main() { var example = new ConcurrentTasksException(); List<string> urls = new List<string>() { "http://site1.com", "http://site2.com" }; await example.ExecuteMultipleRequestsAsync(urls); } } ``` 在此案例中,我们创建了一组异步任务并通过 `Task.WhenAll` 同时启动这些任务。这种方式能够显著提升效率,尤其是在涉及大量独立 I/O 操作的情况下。 --- ### 示例 3: 错误处理 对于可能抛出异常的异步操作,推荐采用标准的 `try-catch` 结构来进行错误捕获与管理: ```csharp public class ErrorHandlingExample { public async Task HandleErrorsAsync() { try { string result = await FetchDataWithPotentialErrorAsync(); Console.WriteLine($"Success! Result is {result}."); } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } } private async Task<string> FetchDataWithPotentialErrorAsync() { bool shouldThrowError = true; if (shouldThrowError) { throw new InvalidOperationException("Simulated network failure!"); } await Task.Delay(1000); return "No errors!"; } } public class Program { public static async Task Main() { var handler = new ErrorHandlingExample(); await handler.HandleErrorsAsync(); } } ``` 这里展示了如何优雅地捕捉并响应来自异步函数中的潜在问题[^1]。 --- ### 总结 通过合理运用 `async` `await`,开发者可以在保持清晰可读性的前提下构建高效的异步应用程序。无论是单个还是批量的异步任务,亦或是复杂的错误恢复场景,这一技术都能提供强大的支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值