美文网首页
.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

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