美文网首页
.Net关于线程THREAD TASK ASYNC&AW

.Net关于线程THREAD TASK ASYNC&AW

作者: TeemoHQ | 来源:发表于2016-07-12 17:50 被阅读108次

今天在写多线程同步执行一个接口时,用到了AutoResetEvent这东西。因为很久没写C#,(都在写OC),忘记了。所以打算写篇文章记录关于线程的内容。大致是借鉴了博客文章async & await 的前世今生.


区别:

Thread(.Net1.0出现,创建不会再线程池,没有返回值)

Task(.Net4.0出现,4.5引入Run方法,默认会直接使用线程池)

async & await(.Net4.5出现)


创建:

注意:如果我们不使用Task,又想用线程池的话,可以使用ThreadPool类。Thread是不会放到线程池的


共享数据

在使用多线程的时候经常会碰到,多个线程需要使用一个资源对象,这样就会造成这资源对象混乱。所以需要多线程同步(串行执行,等待执行)。

方法其实很多:

a.全局变量判断是否进入

b,lock

c,线程阻塞:信号量(AutoResetEvent,ManualResetEvent,Semaphore)

lock的话一般会用在内存只分配一次的变量上。一般是全局的静态变量

信号量的用法比较简单,set()通知可以让下一个进程执行啦,waitone()让下一个线程等待,至于这三个的区别,这里不详细说。


异步等待async & await

流程解释:

1.进入Main()方法,执行DisplayValue()方法,原本应该等待DisplayValue()方法执行完毕再往下执行输出代码,但是DisplayValue()方法修饰了async,这就表示异步去执行这个方法。所以是并发的。即输出”MyClass() End.”,同时还在执行DisplayValue()方法。

2.在进入DisplayValue()方法时,按理说:应该马上输出“”Value is :result",但是看到await修饰的GetValueAsync()方法。所以必须等待GetValueAsync()方法完成后才能执行下一句代码。

相关文章

  • .Net关于线程THREAD TASK ASYNC&AW

    今天在写多线程同步执行一个接口时,用到了AutoResetEvent这东西。因为很久没写C#,(都在写OC),忘记...

  • Java多线程

    线程池 线程 Task 一个线程总是关联这一个Task。 拿Thread来说,要么继承Thread(Thread实...

  • .NET多线程(Thread,ThreadPool,Task,A

    .NET多线程是什么? 进程与线程 进程是一种正在执行的程序。 线程是程序中的一个执行流。 多线程是指一个程序中可...

  • 线程Thread/Task

    如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果...

  • 第21章 线程

    使用Thread类可以创建和控制线程。 基础应用 task与thread的异同(答案收集于百度): task是根据...

  • 8月总结上

    1.task.executeOnExecutor线程池和THREAD_POOL_EXECUTOR一起使用task....

  • Java多线程和并发

    Java线程和并发 Thread线程的创建,状态,优先级等 线程创建:https://my.oschina.net...

  • Java 线程(1)- 创建与销毁

    Java 采用 thread-per-task 的线程模型,即一个任务(一段代码)对应一个 Java 线程(thr...

  • Unity实践—多线程任务队列实现

    Unity 已可使用 Thread、Task 等处理多线程任务,但缺少成熟的多线程任务队列工具,所以在此实现一个,...

  • C# 多线程的使用

    此篇文章简单总结了C#中主要的多线程实现方法,包括Thread、ThreadPool、Parallel和Task类...

网友评论

      本文标题:.Net关于线程THREAD TASK ASYNC&AW

      本文链接:https://www.haomeiwen.com/subject/gycsjttx.html