一. Task开启多线程的三种形式 1. 利用TaskFactory下的StartNew方法,向StartNew传递无参数的委托,或者是Action<object>委托. 2. 利用Task.Run()开启多线程,能向其中传递无参数的委托,有参数的可以使用  Task.Run(()=>{   TestThread("ypf")  })这种形式.(推荐这种方式,最简洁.) 3. 先实例化Task,然后调用Start方法进行线程的开启. Task构造函数可以无参委托或无参…
一. BeginInvoke最后两个参数的含义 倒数第二个参数:指该线程执行完毕后的回调函数:倒数第一个参数:可以向回调函数中传递参数. 下面以一段代码说明: /// <summary> /// 执行动作:耗时而已 /// </summary> private void TestThread(string threadName) { Console.WriteLine("线程开始:线程名为:{2},当前线程的id为:{0},当前时间为:{1},", System…
一. 综述 经过两个多个周的整理,异步多线程章节终于整理完成,如下图所示,主要从基本概念.委托的异步调用.Thread多线程.ThreadPool多线程.Task.Parallel并行计算.async和await.线程特殊处理.委托赋值的几种形式等九个方面来介绍异步多线程. 二. 基本概念的梳理 1. 进程.线程和多线程 进程:当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,而一个进程又是由多个线程组成. 线程:线程是程序中的一个执行流,每个线程都有自己…
1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃.这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以走下来. 解决方案:给函数体加try-catch,只让报错线程异常,其它线程可以正常进行. private void button7_Click(object sender, EventArgs e) { Stopwatch watch = new Stopwatch(); watch.Start(…
1.  方法名前只有async,但是方法中Task实例前没有await关键字,该方法和普通方法没有什么区别,但是会报一个警告. #region 情况一 /// <summary> /// 当只有async,没有await时,方法会有个警告 /// 和普通的多线程方法没有什么区别 /// </summary> private static async void Test1() { //主线程执行 Console.WriteLine("主线程{0}开始:", Thr…
一. Thread多线程   1. 两种使用方式 通过F12查看Thread后,发现有两类构造函数,ParameterizedThreadStart和ThreadStart,其中 ThreadStart:无参无返回值的委托 ParameterizedThreadStart:无返回值,但是有一个object类型参数的委托 下面Thread的使用都是围绕上面这两个构造函数来进行的. 方式一:(当委托是无参数,但赋值的方法又是有参数的,可以使用这种方式转换) 当只有一行的时候,可以省略{},实际上和下…
一.简介 Task是.NET Framework4.0 TPL(任务并行库)提供的新的操作线程池线程的封装类.它提供等待.终止(取消).返回值.完成通知.失败通知.控制执行的先后次序等优化线程操作功能.Task(任务)并不是线程,任务运行的时候需要使用线程,但并不是说任务取代了线程,任务代码是使用底层的线程(Thread或ThreadPool线程)运行的,任务与线程之间并没有一对一的关系. 二.Task创建与启动 Task类创建的任务使用的是后台线程,所以在前台线程全部终止的时候,如果任务还没有…
我们常常会使用sys_execute函数执行一些外部的程序或者命令来做一些事情,但是由于sys_execute是一个同步的函数,它会等待执行的命令完成后才会返回.在大多数情况下,这个函数足够用了. 但是在一些特殊的情况下,测试工程师可能期望在执行某个命令的过程中检查软件的状态,以便判断软件是否工作正常.这种情况下,我们就需要一个异步的sys_execute函数.不幸的是,SilkTest并没有提供这样的函数,不过我们有一个简单的办法绕过它,那就是在执行的命令行时使用start. 示例代码看上去像…
一. Lambda和linq入门 lambda表达式又叫点标记,linq表达式又叫查询表达式,下面有三个简单的案例说明一下二者的基本用法,详细用法会在后续章节中更新. 二. 事例 1. 准备学生信息. List<Student> studentList = new List<Student>() { new Student() { Id=, Name="打兔子的猎人", ClassId=, Age= }, new Student() { Id=, Name=&q…
今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一下进化史了 1:委托异步多线程,所有的异步都是基于委托来实现的 #region 委托异步多线程 { //委托异步多线程 Stopwatch watch = new Stopwatch(); watch.Start(); Console.WriteLine($"开始执行了,{DateTime.Now.…