• C# 异步编程(1)


    1、using System.Threading;

    thread1.Start();  开始线程

    thread1.Name ="" 线程名只能赋值一次

    Thread.CurrentThread.Name   当前线程名

    thread1.Join() 参数可以为毫秒也可以为TimeSpan,运行thread1线程,当有参数时如果超时返回False

    Thread.Sleep() 参数可以为毫秒也可以为TimeSpan,Thread.Sleep(0)这样调用会导致线程立即放弃本身当前的时间片,自动将cpu移交给其他线程。

    Thread.Yield() 做同样的事,但是它只会把执行交给同一处理器上的其他线程

    2、阻塞(Blocking)

    当等待Sleep或Join,线程处于阻塞状态;

    thread1.ThreadState 当前线程状态

    可以通过ThreadState这个属性来判断线程是否处于阻塞的状态

    bool blocked = (someThread.ThreadState & ThreadState.WaitSleepJoin) != 0;

    ThreadState最有用的四个枚举值是:

    Unstarted,Running,WaitSleepJoin,Stopped

    /*如果是ThreadState.Unstart | ThreadState.WaitSleppJoin |ThreadState.Stopped 则返回这些状态
    否则就是Running状态*/

    public
    static ThreadState SimpleThreadState (ThreadState ts) { return ts & (ThreadState.Unstart | ThreadState.WaitSleppJoin | ThreadState.Stopped); }

    3、解除阻塞

    当满足下面四种情况时,就会解除阻塞

    1、阻塞条件被满足

    2、操作超时(如果设置超时的话)

    3、通过Thread.Interrupt()进行打断

    4、通过Thread.Abort()进行中止;

    4、阻塞和忙等待(自旋) Blocking vs Spinning

    IO-bound操作的工作方式有两种:

    在当前线程上同步的等待:Console.ReadLine() ,Thread.Sleep(), Thread.Join()...

    异步的操作,在稍后操作完成时触发一个回调动作。

    同步等待的I/O-bound操作将大部分时间花在阻塞线程上。

    他们也可以周期性的在一个循环里进行“打转(自旋)”

    while(DateTime.Now < nextStartTime)

    Thread.Sleep(100);

    while (DateTime.Now < nextStartTime);

  • 相关阅读:
    每日作业
    Bootstrap框架
    每日作业
    前端之jQuery
    css之浮动详解
    sh命令
    shell编程:sed的选项
    linux 创建连接命令 ln -s 软链接
    grep与egrep命令
    Centos之命令搜索命令whereis与which
  • 原文地址:https://www.cnblogs.com/zuiailiuruoying/p/14791783.html
Copyright © 2020-2023  润新知