C# 异步编程

目录

1、什么是异步编程?

2、怎么取消异步?

3、WhenAny()和WhenAll()的区别

4、异常,OpretorExcepssion和InterruptExcepssion

5、异步的超时取消CancelAfter

6、异步任务之间通信

7、异步编程中使用同步机制

8、在使用异步编程时,需要注意的地方:

9、异步编程与多线程的区别和适用场景:

10、简单的实现异步的方法


1、什么是异步编程?

用async作为关键字

异步编程具有传染性

Task:包含了异步任务的各种状态的一个引用类型。运行状态,结果,报错等。

2、怎么取消异步?

  • CancellationTokenSource

    static readonly CancellationTokenSource cts = new CancellationTokenSource();
    cts.Cancel();

    // 异步的超时取消 可以用下面这两种方式实现
    // 1.在初始化时直接赋值TimeSpen
    CancellationTokenSource cts = new CancellationTokenSource(3000);
    // 2.调用CancelAfter()
    cts.CancelAfter(3000);

3、WhenAny()和WhenAll()的区别

相同点:

都是用TaskList作为参数

不同点:

返回值不同,WhenAny()返回的是已经执行完成的Task,WhenAll()返回的是所有Task的结果的集合

返回次数不同,WhenAny()在每次有任务结束时都会返回一次,WhenAll()只会在所有的任务结束后才会返回一次

4、异常,OpretorExcepssion和InterruptExcepssion

5、异步的超时取消CancelAfter

cts = new CancellationTokenSource(3000);

cts.CancelAfter(3000);

6、异步任务之间通信

线程间通信:

channal 相当于一个自带信号量的ConcurrentQueue(线程安全的队列)

7、异步编程中使用同步机制

  • TaskCompletionSource 单次使用

  • SemaphoreSlim 重复使用

8、在使用异步编程时,需要注意的地方:

  • 异步编程最主要的就是不阻塞,所以要尽量避免阻塞的情况发生,
  • 异步方法通常需要传递,具有依赖性

9、异步编程与多线程的区别和适用场景:

10、简单的实现异步的方法

复制代码
// 这是一个普通的方法
Public string DoSomething()
{
    Thread.Sleep(3000);
    return "this is a test";
}

Void Main()
{
    // 将DoSomething方法改成异步调用
    var result =  await Task.Run(()=>DoSomething());
    
}
相关推荐
李高钢16 小时前
REST vs gRPC 选型对比与迁移实践:从原理到落地
c#·集成·winforms
一个帅气昵称啊17 小时前
.Net C# AI智能体开发-快速开始
开发语言·c#·.net
半亩码田20 小时前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#
楠楠子呀1 天前
独立站聊天转化全链路:从二维码引流到数据复盘
java·javascript·数据仓库·python·c#·自动化·etl
csdn_aspnet1 天前
C# 第k个最小元素(K’th Smallest Element)
算法·c#·排序算法
影寂ldy1 天前
Modbus-ASCII 协议 + LRC校验
笔记·网络协议·c#
自己的九又四分之三站台1 天前
C# 接入 RasterLite2:从原生 DLL 加载到 Coverage、Section、Tile 验证
开发语言·c#·地理信息
好名字都被猪取了-1 天前
# C# 全栈开发资源包(.NET8/.NET10)
c#
淡海水1 天前
03-05-线性-Array-List-LinkedList与Span-所有权与成本模型选型
c#·list·编译·array·clr·机器码
瓜皮弟子头很铁1 天前
使用c#程序打开windows软件
c#