C# 线程管理:多线程创建方式

Posted 数据轨迹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 线程管理:多线程创建方式相关的知识,希望对你有一定的参考价值。

首先介绍四种多线程创建方法:

// 不带参数
public void process()

   Thread.Sleep(1000000);


// 带参数
public void processP()

    Thread.Sleep(10000);

(1):Thread 创建线程

// 不带参数
Thread th = new Thread(process);
th.IsBackground = true;    // 后台启动后,主程序关闭一起关闭。前台程序,主程序关闭仍然执行(默认)
th.Start();

// 带参数
Thread th1 = new Thread(new ParameterizedThreadStart(processP));
th1.Start(1);

(2):Task创建线程

// 没有参数
Task t = new Task(() =>  process(); );
t.Start();

// 带参数
Task t = new Task(new Action<object>(processP),9)
t.Start()

// 参数和返回值
// task不能有多参数,只能有一个object参数或没有参数
// 下面string是返回值,object是参数
public string TaskRun(object arg)

    return "hello";

Task<string> t1 new Task<string>(new Func<object,string>(TaskRun),arrs);

(3):ThreadPool创建线程

ThreadPool.QueueUserWorkItem(process);        // 无参数
ThreadPool.QueueUserWorkItem(processP, null); // 有参数

(4):Parallel创建并行任务:

// 创建顺序执行
ParallelLoopResult result = Parallel.For(0, 10, new ParallelOptions()  MaxDegreeOfParallelism = 10 , i =>
            
                Console.WriteLine("迭代次数:0,任务ID:1,线程ID:2", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(10);
            );

            Console.WriteLine("是否完成:0", result.IsCompleted);
            Console.WriteLine("最低迭代:0", result.LowestBreakIteration);

// 数组遍历
string[] data =  "str1", "str2", "str3" ;
            ParallelLoopResult result = Parallel.ForEach<string>(data, str =>
              
                  Console.WriteLine(str);
              );
            Console.WriteLine("是否完成:0", result.IsCompleted);
            Console.WriteLine("最低迭代:0", result.LowestBreakIteration);

// 多任务制定
Parallel.Invoke(() =>
            
                Thread.Sleep(100);
                Console.WriteLine("method1");
            , () =>
            
                Thread.Sleep(10);
                Console.WriteLine("method2");
            );

 

以上是关于C# 线程管理:多线程创建方式的主要内容,如果未能解决你的问题,请参考以下文章

C# 多线程的自动管理(线程池) 基于Task的方式

C# 多线程初级汇总

干货分享:详解线程的开始和创建

C#爬虫爬虫的多线程如何实现

C# 通过线程来控制进度条(转)--讲解多线程对界面的操作

Java 基础 - 多线程基础