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());
    
}
相关推荐
MyBFuture6 小时前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro
有来技术8 小时前
ASP.NET Core 权限管理系统(RBAC)设计与实现|vue3-element-admin .NET 后端
vue.js·后端·c#·asp.net·.net
张人玉9 小时前
C#WinFrom中show和ShowDialog的区别
开发语言·microsoft·c#
m0_748233179 小时前
C#:微软的现代编程利器
开发语言·microsoft·c#
Traced back9 小时前
SQL Server数据自动清理系统最终版(C# WinForms完整源码)
数据库·c#·.net
人工智能AI技术10 小时前
【C#程序员入门AI】Microsoft Extensions for AI (MEAI):统一LLM调用接口,告别厂商绑定
人工智能·c#
William_cl11 小时前
C# ASP.NET路由系统全解析:传统路由 vs 属性路由,避坑 + 实战一网打尽
开发语言·c#·asp.net
初九之潜龙勿用1 天前
C# 操作Word模拟解析HTML标记之背景色
开发语言·c#·word·.net·office
时光追逐者1 天前
使用 MWGA 帮助 7 万行 Winforms 程序快速迁移到 WEB 前端
前端·c#·.net
老骥伏枥~1 天前
【C# 入门】程序结构与 Main 方法
开发语言·c#