C# 异步编程的几种方式

在异步程序中,程序代码不需要严格按照编写时的顺序执行

为了改善代码性能,有时候需要在一个新的线程中运行一部分代码

有时候无需创建新的线程,但为了更好的利用单个线程的能力,需要改变代码的执行顺序

也就是说:

异步编程赋予代码非顺序执行的能力,让程序能够在部分耗时操作的同时,干其他的事情

一、通过委托实现异步

如果委托对象在调用列表中只有一个方法(引用方法),它就可以异步执行这个方法

委托类有 BeginInvoke,EndInvoke 方法,可以用以下方式使用:

  • 当调用 BeginInvoke 方法时,它开始在一个独立线程上执行引用方法,并立即返回到原始线程;原始线程可以继续运行,而引用方法会在线程池大的线程中并行执行
  • 当程序希望获取已完成的异步方法的结果时,可以检查 BeginInvoke 返回的 IAsyncResult 的 IsCompleted 属性,或者调用 EndInvoke 方法等待委托的完成

使用这一过程有三种标准模式,区别在于:原始线程如何知道发起的线程已经完成

  • 一直等待到完成模式(wait until done):

  原始线程发起异步方法并做了一些其他处理后,原始线程中断并等待异步方法完成后再继续

  • 轮询模式(polling):

  原始线程定期检查发起的异步方法线程是否完成,如果没有则继续做其他事情

  • 回调模式(callback):

  原始线程一直执行,无需等待,当发起的线程中引用方法完成后,发起的线程就调用回调方法,调用 EndInvoke 之前处理异步方法的结果

上一篇:uniapp小程序分包


下一篇:Spring — 自动注入 ?