新手浅谈Task异步编程和Thread多线程编程

初学Task的时候上网搜索,看到很多文章的标题都是task取代thread等等相关,我也一直以为task和thread是一类,其实task是.net4.0提出的异步编程,在之前.net1.0有delegete.beginInoke(XXXX),还有.net2.0中的EAP,在最新的4.5中又有async、await这种新的异步编程。而Thread和Threadpool则是多线程编程。

  

但是Task也是把任务推到线程池中

 1         static void Main(string[] args)
 2         {
 3             for(int i=0;i<5;i++)
 4             {
 5                 var task1 = Task.Factory.StartNew(() => Run());
 6                 var task2 = Task.Factory.StartNew(() => Run());
 7                 var task3 = Task.Factory.StartNew(() => Run());
 8                 var task4 = Task.Factory.StartNew(() => Run());
 9             }
10             Console.ReadKey();
11         }
12
13         static void Run()
14         {
15             Thread.Sleep(100);
16             Console.WriteLine("TaskId:{0} ThreadId:{1}", Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
17         }

运行的结果为:

Task和Threadpool相比,Task能获取返回值、有更多的控制等,Threadpool占用的资源较小,如果只需要把任务丢到线程池中,其他的都不管的话,就建议使用Threadpool。

时间: 2024-10-25 16:16:03

新手浅谈Task异步编程和Thread多线程编程的相关文章

多核编程 与 单核多线程编程的区别

1.锁竞争: 单核中,如果单个线程取得所,则获取CPU运行时间,其他等待获取锁的线程被阻塞.使用了锁,影响的只是枷锁和解锁的耗时,CPU始终运行. 多核中,若2个(更多)线程使用同一把锁,则会导致CPU饥饿.实际还是串行化执行! 2.线程分解和执行的区别: 对单核CPU,对客户端软件,采用多线程,主要是 创建多线程将一些计算放在后台执行,而不影响用户交互操作.(用户界面 & 其他计算 并行进行)提高用户的操作性能! 多核中,分别出多个线程,不再限于将用户界面操作和其他计算分离.分解多个线程使为了

新手浅谈C#Task异步编程

Task是微软在.net framework 4.0发布的新的异步编程的利器,当然4.5新增了async.await,这儿我们先说Task相关. 在实际编程中,我们用的较多的是Task.Task.Factory.StarNew.Task.Run,接下来简单的表述下我的理解. //传入Func委托 Task<int> task = new Task<int>(a => { return (int)a + 1; }, 1); task.Start(); Console.Write

新手浅谈Future

Future到底是什么东西?很多人都对这个东西感到特别奇怪(好吧,我承认,那个很多人就只是我自己而已),就我现在的理解,因为本人在并发这方面没有 多少实践经验,所以只好就着一些资料和自己的理解给它下个定义,Future就是保存我们任务的完成信息,比如说,任务中会通过返回某些东西告诉别人它已 经结束了,而Future中就保存了这种信息.利用Futu保存和得到任务的结果的用法如下: Future<String> future = threadPool.submit(new Callable<

浅谈JS异步(asychrouous)

一.概念 (1)asychronous 异步 是JS这种单线程语言解决多任务的一种方法,将耗时的任务(io)设定为异步工作,先交给浏览器负责相关功能的线程来实现耗时的部分工作,按顺序放入任务队列中,等待主代码执行完成,而主线程继续下一个任务,不阻塞代码:主线程任务完成后,会收到浏览器的通知,来实现异步任务的其他代码执行===>事件循环+任务队列 (2)sychronous 同步 任务的执行是一个接着一个执行的,上一个任务执行完成才能继续下一个任务,有多个窗口,进行一个接一个的执行任务 二.异步有

ios开发新手浅谈强大的runtime机制

runtime机制,实际上是一套底层的C语言代码,里面提供了很多的C数据类型和一些功能强大的C语言函数.我们所写的OC代码,在底层都是基于runtime来实现的.所以我们可以说OC实际就是披着面向对象外衣的C语言,因为在运行时,OC代码会编译成C/C++ 来运行.runtime中有很多的C函数,有着很强大的功能,比如 : 1. 能动态类的增删改 成员变量,方法 2.IOS Swizzle 能底层动态的交换两个方法(类方法和对象方法)的实现 IOS swizzle的具体做法: 1.在分类的load

新手浅谈C#关于abstract和interface

abstract:抽象类,是对某一类对象的抽象,继承抽象类的类和抽象类是属于关系 interface:接口,可以说是一种规范,继承接口的类表达则是,我继承了这个接口,我能做什么 举个常用的例子:抽象一个animal类,马(horse)继承animal类,但是有一种马叫天马,他能飞. 1 public abstract class Animal 2 { 3 public void EatFood() 4 { 5 //some code 6 } 7 } 8 9 public class Horse:

浅谈Android和java中的多线程下载

为什么要使用多线程下载呢? 究其原因就一个字:"快",使用多线程下载的速度远比单线程的下载速度要快,说到下载速度,决定下载速度的因素一般有两个: 一个是客户端实际的网速,另一个则是服务端的带宽.我们经常使用的是单线程下载,也就是下载一个文件就是开启一个线程去请求下载资源. 这里我们不考虑客户端实际网速因素,因为这个因素多变,不好控制.我们主要考虑的因素就是服务端的带宽.那么服务端是如何给每个客户端分配 它的下载带宽的呢???它分配的原理大致是这样的,服务端只会给请求它的每个线程平均分配

Socket多线程编程 serversocket服务器多线程编程

服务器代码 package com.lotus.server; import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;

《Python核心编程》18.多线程编程(二)

18.1没有线程支持 #!/usr/bin/env python # -*- coding:utf-8 -*- from time import sleep, ctime def loop0(): print 'start loop 0 at:', ctime() sleep(4) print 'loop 0 done at', ctime() def loop1(): print 'start loop 1 at:', ctime() sleep(2) print 'loop 1 done a