浩明-空间 浩明-空间
首页
  • Unity

    • 类比法学c#
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • typescript杂谈

    • 为什么要用ts
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • vim学习
  • webgl基础
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 悟道
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

储浩明

热爱编程的小明
首页
  • Unity

    • 类比法学c#
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
  • typescript杂谈

    • 为什么要用ts
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • vim学习
  • webgl基础
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 悟道
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JavaScript文章

  • Unity

    • C#类比学习
    • ts-c#的泛型
    • c#命名空间与es6模块
    • lambda表达式
    • c#和ts的异步编程
      • TypeScript 中的异步编程
        • Promise
        • async/await
      • C# 中的异步编程
        • Task 和 Task
    • C#与ts的数组操作方法
    • c#与ts事件
    • c#和ts的继承
    • c#与ts接口
    • c#与ts类对象
  • 学习笔记

  • typescript杂谈

  • 前端
  • Unity
chuhaoming
2024-08-06
目录

c#和ts的异步编程

# TypeScript 中的异步编程

在 TypeScript 中,异步编程主要依赖于 JavaScript 的 Promise 和 async/await 特性。

# Promise

Promise 是 ES6 引入的异步编程模型,可以链式调用 .then() 方法处理异步操作的结果。TypeScript 完全支持 Promise 的使用。

fetch('"https://api.example.com/api/data')
  .then(response => response.json())
  .then(data => {
    // 处理数据
  })
  .catch(error => {
    // 处理错误
  });
1
2
3
4
5
6
7
8

# async/await

async/await 是基于 Promise 之上的语法糖,可以让异步代码看起来更像同步代码,提高了可读性。

async function getData() {
  try {
    const response = await fetch('"https://api.example.com/api/data');
    const data = await response.json();
    // 处理数据
  } catch (error) {
    // 处理错误
  }
}
1
2
3
4
5
6
7
8
9

# C# 中的异步编程

在 C# 中,异步编程也有类似的支持,但使用了不同的语法和概念。

# Task 和 Task

Task 和 Task 是 C# 中表示异步操作的对象类型,类似于 JavaScript 中的 Promise。它们可以返回一个最终的结果或异常。

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        try
        {
            string result = await FetchDataAsync();
            Console.WriteLine($"Fetched data: {result}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }

    static async Task<string> FetchDataAsync()
    {
        // 模拟一个长时间运行的异步操作
        await Task.Delay(2000); // 延迟 2 秒

        // 发送 HTTP 请求获取数据
        string data = await GetDataFromWebAsync();

        // 模拟对数据的进一步处理
        string processedData = ProcessData(data);

        return processedData;
    }

    static async Task<string> GetDataFromWebAsync()
    {
        using (HttpClient client = new HttpClient())
        {
            string url = "https://api.example.com/api/data";
            HttpResponseMessage response = await client.GetAsync(url);
            response.EnsureSuccessStatusCode();
            string responseBody = await response.Content.ReadAsStringAsync();
            return responseBody;
        }
    }

    static string ProcessData(string data)
    {
        // 模拟对数据的处理
        return data.ToUpper();
    }
};
// 注意:using (HttpClient client = new HttpClient())
// 在 C# 中,using 语句用于自动释放资源,它是一种确保对象正确释放资源的安全机制。
// 在您提供的示例中,using (HttpClient client = new HttpClient()) 语句的作用是:
// 创建并获取资源
// new HttpClient() 创建了一个新的 HttpClient 实例,该实例是一种非托管资源,需要在使用完毕后显式释放。
// 使用资源
// 在 using 语句块内部,可以使用 client 对象来执行与 HTTP 相关的各种操作。
// 释放资源
// 当代码执行流离开 using 语句块时,无论是由于正常执行路径还是由于异常,using 语句都会确保正确释放 HttpClient 实例所持有的非托管资源。
// 如果不使用 using 语句,就需要手动调用 HttpClient 实例的 Dispose 方法来释放资源。但使用 using 语句可以自动完成这个步骤,从而避免因忘记调用 Dispose 方法而导致资源泄漏。
// using 语句的工作原理是,它在退出代码块时自动调用 IDisposable 接口的 Dispose 方法。因此,任何实现了 IDisposable 接口的对象都可以在 using 语句中使用,以确保资源被正确释放。
// 总之,在这个示例中,using 语句的作用是确保 HttpClient 实例在使用完毕后被正确释放,从而避免资源泄漏。这是一种编写安全、可靠代码的推荐做法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

在这个示例中:

Main 方法是一个异步方法,使用 async 关键字修饰。它调用 FetchDataAsync 方法并使用 await 获取其结果。 FetchDataAsync 方法也是一个异步方法,返回类型为 Task。它模拟了一个长时间运行的异步操作,并调用 GetDataFromWebAsync 获取数据。然后,它对获取的数据进行进一步处理,并返回结果。 GetDataFromWebAsync 方法使用 HttpClient 发送 HTTP GET 请求获取数据。它返回类型为 Task。 ProcessData 是一个普通的同步方法,模拟对数据的处理操作。 运行这个程序,您将看到以下输出: Fetched data: EXAMPLE DATA FROM WEB 该程序首先延迟 2 秒,模拟一个长时间运行的异步操作。然后,它向 https://api.example.com/data 发送 HTTP GET 请求,获取响应数据。最后,它将获取的数据转换为大写并输出结果。

通过这个示例,您可以看到 async/await 如何与 Task 和 Task 类型结合使用,以编写异步代码。await 关键字会等待异步操作完成,并获取其结果。这使得异步代码看起来像同步代码,但实际上是在不阻塞主线程的情况下执行。

编辑 (opens new window)
#C#
上次更新: 2024/08/09, 10:55:31
lambda表达式
C#与ts的数组操作方法

← lambda表达式 C#与ts的数组操作方法→

最近更新
01
c#与ts类对象
08-06
02
c#与ts接口
08-06
03
c#和ts的继承
08-06
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Haoming chu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式