xml地图|网站地图|网站标签 [设为首页] [加入收藏]
线程基础,log4net使用方法
分类:编程

1.NuGet包管理器中安装log4net

目录

澳门新葡亰手机版 1

澳门新葡亰手机版 2

  • C#多线程编程系列(二)- 线程基础
    • 1.1 简介
    • 1.2 创建线程
    • 1.3 暂停线程
    • 1.4 线程等待
    • 1.5 终止线程
    • 澳门新葡亰手机版,1.6 检测线程状态
    • 1.7 线程优先级
    • 1.8 前台线程和后台线程
    • 1.9 向线程传递参数
    • 1.10 C# Lock关键字的使用
    • 1.11 使用Monitor类锁定资源
    • 1.12 多线程中处理异常
  • 参考书籍
  • 笔者水平有限,如果错误欢迎各位批评指正!

澳门新葡亰手机版 3

2.接着在项目中添加log4net.config文件,以及手撸或寻找一个LogHelper

C#多线程编程系列(二)- 线程基础


添加完log4net.config一定要设置属性,将其始终复制到输出目录

1.1 简介

线程基础主要包括线程创建、挂起、等待和终止线程。关于更多的线程的底层实现,CPU时间片轮转等等的知识,可以参考《深入理解计算机系统》一书中关于进程和线程的章节,本文不过多赘述。

澳门新葡亰手机版 4

1.2 创建线程

在C#语言中,创建线程是一件非常简单的事情;它只需要用到 System.Threading命名空间,其中主要使用Thread类来创建线程。

演示代码如下所示:

using System;
using System.Threading; // 创建线程需要用到的命名空间
namespace Recipe1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1.创建一个线程 PrintNumbers为该线程所需要执行的方法
            Thread t = new Thread(PrintNumbers);
            // 2.启动线程
            t.Start();

            // 主线程也运行PrintNumbers方法,方便对照
            PrintNumbers();
            // 暂停一下
            Console.ReadKey();
        }

        static void PrintNumbers()
        {
            // 使用Thread.CurrentThread.ManagedThreadId 可以获取当前运行线程的唯一标识,通过它来区别线程
            Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId} 开始打印...");
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId} 打印:{i}");
            }
        }
    }
}

运行结果如下图所示,我们可以通过运行结果得知上面的代码创建了一个线程,然后主线程和创建的线程交叉输出结果,这说明PrintNumbers方法同时运行在主线程和另外一个线程中。

澳门新葡亰手机版 5

 

1.3 暂停线程

暂停线程这里使用的方式是通过Thread.Sleep方法,如果线程执行Thread.Sleep方法,那么操作系统将在指定的时间内不为该线程分配任何时间片。如果Sleep时间100ms那么操作系统将至少让该线程睡眠100ms或者更长时间,所以Thread.Sleep方法不能作为高精度的计时器使用。

演示代码如下所示:

using System;
using System.Threading; // 创建线程需要用到的命名空间
namespace Recipe2
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1.创建一个线程 PrintNumbers为该线程所需要执行的方法
            Thread t = new Thread(PrintNumbersWithDelay);
            // 2.启动线程
            t.Start();

            // 暂停一下
            Console.ReadKey();
        }

        static void PrintNumbersWithDelay()
        {
            Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId} 开始打印... 现在时间{DateTime.Now.ToString("HH:mm:ss.ffff")}");
            for (int i = 0; i < 10; i++)
            {
                //3. 使用Thread.Sleep方法来使当前线程睡眠,TimeSpan.FromSeconds(2)表示时间为 2秒
                Thread.Sleep(TimeSpan.FromSeconds(2));
                Console.WriteLine($"线程:{Thread.CurrentThread.ManagedThreadId} 打印:{i} 现在时间{DateTime.Now.ToString("HH:mm:ss.ffff")}");
            }
        }
    }
}

运行结果如下图所示,通过下图可以确定上面的代码是有效的,通过Thread.Sleep方法,使线程休眠了2秒左右,但是并不是特别精确的2秒。验证了上面的说法,它的睡眠是至少让线程睡眠多长时间,而不是一定多长时间。

澳门新葡亰手机版 6

本文由澳门新葡亰手机版发布于编程,转载请注明出处:线程基础,log4net使用方法

上一篇:PHP数组的基础知识,获取系统的网络状态与无线 下一篇:没有了
猜你喜欢
热门排行
精彩图文