[C#] C#线程处理演示代码 →→→→→进入此内容的聊天室

来自 , 2020-04-05, 写在 C#, 查看 159 次.
URL http://www.code666.cn/view/d04e5fdc
  1. using System;
  2. using System.Threading;
  3.  
  4. // Fibonacci 类为使用辅助
  5. // 线程执行长时间的 Fibonacci(N) 计算提供了一个接口。
  6. // N 是为 Fibonacci 构造函数提供的,此外还提供了
  7. // 操作完成时对象发出的事件信号。
  8. // 然后,可以使用 FibOfN 属性来检索结果。
  9. public class Fibonacci
  10. {
  11.     public Fibonacci(int n, ManualResetEvent doneEvent)
  12.     {
  13.         _n = n;
  14.         _doneEvent = doneEvent;
  15.     }
  16.  
  17.     // 供线程池使用的包装方法。
  18.     public void ThreadPoolCallback(Object threadContext)
  19.     {
  20.         int threadIndex = (int)threadContext;
  21.         Console.WriteLine("thread {0} started...", threadIndex);
  22.         _fibOfN = Calculate(_n);
  23.         Console.WriteLine("thread {0} result calculated...", threadIndex);
  24.         _doneEvent.Set();
  25.     }
  26.  
  27.     // 计算第 N 个斐波纳契数的递归方法。
  28.     public int Calculate(int n)
  29.     {
  30.         if (n <= 1)
  31.         {
  32.             return n;
  33.         }
  34.         else
  35.         {
  36.             return Calculate(n - 1) + Calculate(n - 2);
  37.         }
  38.     }
  39.  
  40.     public int N { get { return _n; } }
  41.     private int _n;
  42.  
  43.     public int FibOfN { get { return _fibOfN; } }
  44.     private int _fibOfN;
  45.  
  46.     ManualResetEvent _doneEvent;
  47. }
  48.  
  49. public class ThreadPoolExample
  50. {
  51.     static void Main()
  52.     {
  53.         const int FibonacciCalculations = 10;
  54.  
  55.         // 每个 Fibonacci 对象使用一个事件
  56.         ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];
  57.         Fibonacci[] fibArray = new Fibonacci[FibonacciCalculations];
  58.         Random r = new Random();
  59.  
  60.         // 使用 ThreadPool 配置和启动线程:
  61.         Console.WriteLine("launching {0} tasks...", FibonacciCalculations);
  62.         for (int i = 0; i < FibonacciCalculations; i++)
  63.         {
  64.             doneEvents[i] = new ManualResetEvent(false);
  65.             Fibonacci f = new Fibonacci(r.Next(20,40), doneEvents[i]);
  66.             fibArray[i] = f;
  67.             ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback, i);
  68.         }
  69.  
  70.         // 等待池中的所有线程执行计算...
  71.         WaitHandle.WaitAll(doneEvents);
  72.         Console.WriteLine("Calculations complete.");
  73.  
  74.         // 显示结果...
  75.         for (int i= 0; i<FibonacciCalculations; i++)
  76.         {
  77.             Fibonacci f = fibArray[i];
  78.             Console.WriteLine("Fibonacci({0}) = {1}", f.N, f.FibOfN);
  79.         }
  80.     }
  81. }
  82.  
  83.  
  84.  
  85. //csharp/4925

回复 "C#线程处理演示代码"

这儿你可以回复上面这条便签

captcha