求C#关于线程池的简单例子
发布网友
发布时间:2022-05-11 00:03
我来回答
共1个回答
热心网友
时间:2023-11-18 00:22
public delegate void WaitCallback(Object state);
代码示例:
01 using System;
02 using System.Threading;
03
04 public class Test
05 {
06 // 存放要计算的数值的字段
07 static double number1 = -1;
08 static double number2 = -1;
09
10 public static void Main()
11 {
12 // 获取线程池的最大线程数和维护的最小空闲线程数
13 int maxThreadNum, portThreadNum;
14 int minThreadNum;
15 ThreadPool.GetMaxThreads(out maxThreadNum, out portThreadNum);
16 ThreadPool.GetMinThreads(out minThreadNum, out portThreadNum);
17 Console.WriteLine("最大线程数:{0}", maxThreadNum);
18 Console.WriteLine("最小空闲线程数:{0}", minThreadNum);
19
20 // 函数变量值
21 int x = 15600;
22
23 // 启动第一个任务:计算x的8次方
24 Console.WriteLine("启动第一个任务:计算{0}的8次方。", x);
25 ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc1), x);
26
27 // 启动第二个任务:计算x的8次方根
28 Console.WriteLine("启动第二个任务:计算{0}的8次方根。", x);
29 ThreadPool.QueueUserWorkItem(new WaitCallback(TaskProc2), x);
30
31 // 等待,直到两个数值都完成计算
32 while (number1 == -1 || number2 == -1) ;
33
34 // 打印计算结果
35 Console.WriteLine("y({0}) = {1}", x, number1 + number2);
36
37 }
38
39 // 启动第一个任务:计算x的8次方
40 static void TaskProc1(object o)
41 {
42 number1 = Math.Pow(Convert.ToDouble(o), 8);
43 }
44
45 // 启动第二个任务:计算x的8次方根
46 static void TaskProc2(object o)
47 {
48 number2 = Math.Pow(Convert.ToDouble(o), 1.0 / 8.0);
49 }
50
51 }