C#中使用线程Task类和Thread类小结

刚接触C#3个月左右。原先一直使用C++开发。由于公司的须要,所地採用C#开发。主要是控制设备的实时性操作,此为背景。

对于C#中的Task和Thread我在这不作介绍,要了解很多其它的。假设查看相当信息。此次项目中使用到TASK和THRED,让我调试足足用了将近两周的时间才找出问题所在,所以在此写出来防止跟我一样刚接触C#,又同一时候须要对线程的实时性要求的开发者一些个人总结注意事项。

1.Task适合用于多处理器,且i系列多处理器。

2.Thread则适用于全部的处理器,实时性更高。

以下是我的个人測试代码:

当中使用的对错可能是我个人对C#线程理解不够引起的。假设有使用不对错,望大鸟指导。

        private static void ThreadAndTaskTest()
{
Stopwatch watch = new Stopwatch();
watch.Start(); <p>            //Thread threadTest1 = new Thread(() =>
            //{
            //    Thread.Sleep(2000);
            //    Debug.WriteLine("线程1结束消耗时间:{0}", watch.ElapsedMilliseconds);
            //});
            //threadTest1.Start();</p><p>            //Thread threadTest2 = new Thread(() =>
            //{
            //    Thread.Sleep(2000);
            //    Debug.WriteLine("线程2结束消耗时间:{0}", watch.ElapsedMilliseconds);
            //});
            //threadTest2.Start();</p><p>            //Thread threadTest3 = new Thread(() =>
            //{
            //    Thread.Sleep(2900);
            //    Debug.WriteLine("线程2结束消耗时间:{0}", watch.ElapsedMilliseconds);
            //});
            //threadTest3.Start();</p><p> </p> var Task1 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2500);
Debug.WriteLine("线程1结束消耗时间:{0}", watch.ElapsedMilliseconds);
}); var Task2 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2700);
Debug.WriteLine("线程2结束消耗时间:{0}", watch.ElapsedMilliseconds);
}); var Task3 = Task.Factory.StartNew(() =>
{
Thread.Sleep(2900);
Debug.WriteLine("线程3结束消耗时间:{0}", watch.ElapsedMilliseconds);
}); while (watch.ElapsedMilliseconds <= 3000)
{
//if (!threadTest.IsAlive && !threadTest1.IsAlive)
if (Task1.IsCompleted && Task2.IsCompleted && Task3.IsCompleted)
{
Debug.WriteLine("监控结束消耗时间:{0}", watch.ElapsedMilliseconds);
break;
}
else
Thread.Sleep(1);
}
}

上面採用Task測试结果例如以下:

线程1结束消耗时间:2503

             线程2结束消耗时间:2703

             线程3结束消耗时间:3944(理论应该2905)

相同的代码採用Thread的測试结例如以下:

线程2结束消耗时间:2003

             线程1结束消耗时间:2002

             线程2结束消耗时间:2905

上面測试环境在:

处理器:Pentium(R)Dual-Core CPU E6700 @3.20GHXZ

安装内存(RAM):4.0GB

系统类型:32位操作系统

假设採用 i5系列的CPU,其他硬件环境都一样则不会有这样的超时情况.

在此也遇到点问题:线程20个以上同一时候执行,线程的实时性差异也非常大,同一个线程函数差距有700ms.

C#中假设正确使用线程Task类和Thread类的更多相关文章

  1. 如何创建线程第一种继承Thread类

    步骤 1:定义一个类 继承Thread类.2:重写Thread类的run方法.3:直接创建Thread的子类对象创建线程.4:调用start方法开启线程并调用线程的任务run方法执行.-------- ...

  2. 【Java中的线程】java.lang.Thread 类分析

    进程和线程 联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服.这样开水烧完,衣服洗的也差不多了.这 ...

  3. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  4. Java知多少(58)线程Runnable接口和Thread类详解

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  5. Java 线程--继承java.lang.Thread类实现线程

    现实生活中的很多事情是同时进行的,Java中为了模拟这种状态,引入了线程机制.先来看线程的基本概念. 线程是指进程中的一个执行场景,也就是执行流程,进程和线程的区别: 1.每个进程是一个应用程序,都有 ...

  6. 多线程-2.线程创建方式和Thread类

    线程的创建方式 1.继承Thread类,重写run方法,示例如下: 1 class PrimeThread extends Thread { 2 long minPrime; 3 PrimeThrea ...

  7. python端口扫描用多线程+线程安全的队列+Thread类实现

    用线程安全的队列Queue实现扫描端口数据存储 用多线程扫描端口 用Thread类实现程序组织 #coding:utf-8 import sys import socket import sys im ...

  8. Process类,Thread类,Pool类,gevent类,ProcessPoolExecutor,ThreadPoolExecutor的用法比较

    一 Process类 multiprocessing模块下的一个类 创建子进程. 有两种方法 方法一 from multiprocessing import Process import os def ...

  9. communication between threads 线程间通信 Programming Concurrent Activities 程序设计中的并发活动 Ada task 任务 Java thread 线程

    Computer Science An Overview _J. Glenn Brookshear _11th Edition activation 激活 parallel processing 并行 ...

随机推荐

  1. Arrays.asList()

    1.数组--->List String[] ss={"abc","def","xyz","aaaaaaaa",&q ...

  2. 代码的未来读书笔记&lt;二&gt;

    代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...

  3. Could Not Connect

    今天在写Quartz定时任务web应用时,访问项目页面出现Could Not Connect,后台也没报错. 然后我访问http://127.0.0.1:8080(Apache主页)的时候是正常的. ...

  4. 在JBuilder8在使用ANT

    在JBuilder8中使用ANT                                                            作者:翁驰原    在JBuilder8中.Ap ...

  5. 理解JavaScript的闭包

    在JS这块,免不了被问什么是闭包. 从一个常见的循环问题说起. 有一个ul列表, 里面有5个li标签,我希望点击每个li标签的时候,弹出每个li标签对应的索引值(第一个弹出0,第二个弹出1...). ...

  6. Make a dent in the universe

    李自成<一个数学家平反>.就像我第一次读同一,我感到鼓舞的野心文."野心是世界的驱动力的最好的结果几乎所有的工作. " 心野心是要留下点什么在自己身后的永恒价值 在这个 ...

  7. AndroidUI的组成部分ProgressBar

    package com.gc.progressbar; /* * 1.ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件, * 它还派生了两个经常使用的组件:Se ...

  8. Windows8和Windows Phone应用开发主题编码汇总

    原文:Windows8和Windows Phone应用开发主题编码汇总 在Windows 8和Windows Phone应用开发中经常需要自定义一些Windows Store应用风格主题,下面列举一些 ...

  9. Project_2007关键

    本人今天成功用这个密钥,安装project2007. 分享给着急的小伙伴们. W2JJW-4KYDP-2YMKW-FX36H-QYVD8 版权声明:本文博客原创文章.博客,未经同意,不得转载.

  10. 深入研究Java类载入机制

    深入研究Java类载入机制   类载入是Java程序运行的第一步,研究类的载入有助于了解JVM运行过程,并指导开发人员採取更有效的措施配合程序运行. 研究类载入机制的第二个目的是让程序能动态的控制类载 ...