目录
4、异常,OpretorExcepssion和InterruptExcepssion
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());
}