浅谈C#多线程 异步编程

背景:线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

异步:与之相反的就是同步,即按顺序执行(类似初中物理的串联电路图),反之异步是并联电路图,相互之间互不影响,执行完立马返回结果,无需等待。

解决了并发量高的问题。

案列:

1000个请求,如果是单线程,同步接口,则会在一个线程里执行1000个请求,按1.2.3.4....1000的顺序执行并返回接口,待上一个请求完成在执行下一个请求,耗时等待非常久。

如果改用多线程,异步的方式,就好比如开了1000个线程,每个请求占一个线程,相互独立,互不影响,谁先执行完就立马返回结果。

注意:C#里的线程是轮询的方式,按单位时间内轮询执行某个线程,java是抢断方式,可以一直执行某个个耗时比较长的线程。

 如图:async await 修饰方法为异步方法,

Task.Run(menthod): 开启线程

method是一个lamda表达式:实质是一个委托(类型js中的回调),待开启线程委托执行获取数据的接口。

ps:博主主攻javascript,学会一门语言,其他语言都是类似的,只是名字叫法不一样。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,可以使用多线程来实现异步加载。一种常见的方法是使用Thread类创建子线程,并在子线程中执行需要异步加载的任务。可以通过ThreadStart委托将要执行的方法与新线程对象关联起来。例如,在FrmQC111_Load方法中,可以创建一个新的线程load,并将loadpage方法与该线程关联起来。loadpage方法中使用Action委托与具体的方法Bindt进行绑定,并使用BeginInvoke方法进行异步调用。Bindt方法用于实现加载控件数据源的操作。[1] 另一种常见的方法是使用Task类来执行异步任务。在.NET 4.0及以上版本中,可以使用Task类来实现异步操作。Task类提供了一种更方便的方式来执行异步任务,并且可以提高程序的运行效率。在.NET 5.0中,还引入了async/await关键字,使得异步编程更加方便。[2] 下面是两种方法的示例代码: 使用Thread类: ```csharp private void FrmQC111_Load(object sender, EventArgs e) { Thread load = new Thread(new ThreadStart(loadpage)); load.Start(); } private void loadpage() { // 执行异步加载的操作 Bindt(); } private void Bindt() { // 实现具体的加载操作 // ... } ``` 使用Task类: ```csharp private async void FrmQC111_Load(object sender, EventArgs e) { await Task.Run(() => Bindt()); } private void Bindt() { // 实现具体的加载操作 // ... } ``` 以上是两种常见的在C#中实现多线程异步加载的方法。具体选择哪种方法取决于你的需求和编程习惯。[3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值