[C#]如何使用ThreadPool
发布时间:2020-12-15 04:38:07 所属栏目:百科 来源:网络整理
导读:摘要 一个例子 span style="color: #0000ff;"namespace span style="color: #000000;" ThreadPoolDemo { span style="color: #0000ff;"class span style="color: #000000;" Program { span style="color: #0000ff;"static span style="color: #0000ff;"void
摘要
一个例子<span style="color: #0000ff;">namespace<span style="color: #000000;"> ThreadPoolDemo
{ <span style="color: #0000ff;">class<span style="color: #000000;"> Program { <span style="color: #0000ff;">static <span style="color: #0000ff;">void Main(<span style="color: #0000ff;">string<span style="color: #000000;">[] args) { <span style="color: #0000ff;">const <span style="color: #0000ff;">int FibonacciCalculations = <span style="color: #800080;">10<span style="color: #000000;">; ManualResetEvent[] doneEvents = <span style="color: #0000ff;">new<span style="color: #000000;"> ManualResetEvent[FibonacciCalculations]; Fibonacci[] fibArray = <span style="color: #0000ff;">new<span style="color: #000000;"> Fibonacci[FibonacciCalculations]; Random r = <span style="color: #0000ff;">new<span style="color: #000000;"> Random(); Console.WriteLine(<span style="color: #800000;">"<span style="color: #800000;">launching {0} tasks...<span style="color: #800000;">"<span style="color: #000000;">,FibonacciCalculations); <span style="color: #0000ff;">for (<span style="color: #0000ff;">int i = <span style="color: #800080;">0; i < FibonacciCalculations; i++<span style="color: #000000;">) { doneEvents[i] = <span style="color: #0000ff;">new ManualResetEvent(<span style="color: #0000ff;">false<span style="color: #000000;">); Fibonacci f = <span style="color: #0000ff;">new Fibonacci(r.Next(<span style="color: #800080;">20,<span style="color: #800080;">40<span style="color: #000000;">),doneEvents[i]); fibArray[i] =<span style="color: #000000;"> f; ThreadPool.QueueUserWorkItem(f.ThreadPoolCallback,i); } <span style="color: #008000;">//<span style="color: #008000;">wait for all threads in pool to calculate <span style="color: #000000;"> WaitHandle.WaitAll(doneEvents); <span style="color: #0000ff;">for (<span style="color: #0000ff;">int i = <span style="color: #800080;">0; i < FibonacciCalculations; i++<span style="color: #000000;">) { Fibonacci f =<span style="color: #000000;"> fibArray[i]; Console.WriteLine(<span style="color: #800000;">"<span style="color: #800000;">Fibonacci({0})={1}<span style="color: #800000;">"<span style="color: #000000;">,f.N,f.FibofN); } Console.Read(); } } <span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> Fibonacci { <span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> _n; <span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> _fibofN; <span style="color: #0000ff;">private<span style="color: #000000;"> ManualResetEvent _doneEvent; <span style="color: #0000ff;">public <span style="color: #0000ff;">int N { <span style="color: #0000ff;">get { <span style="color: #0000ff;">return<span style="color: #000000;"> _n; } } <span style="color: #0000ff;">public <span style="color: #0000ff;">int FibofN { <span style="color: #0000ff;">get { <span style="color: #0000ff;">return<span style="color: #000000;"> _fibofN; } } <span style="color: #0000ff;">public Fibonacci(<span style="color: #0000ff;">int<span style="color: #000000;"> n,ManualResetEvent doneEvent) { _n =<span style="color: #000000;"> n; _doneEvent =<span style="color: #000000;"> doneEvent; } <span style="color: #0000ff;">public <span style="color: #0000ff;">void ThreadPoolCallback(<span style="color: #0000ff;">object<span style="color: #000000;"> threadContext) { <span style="color: #0000ff;">int threadIndex = (<span style="color: #0000ff;">int<span style="color: #000000;">)threadContext; Console.WriteLine(<span style="color: #800000;">"<span style="color: #800000;">thread {0} started....<span style="color: #800000;">"<span style="color: #000000;">,threadIndex); _fibofN =<span style="color: #000000;"> Calculate(_n); Console.WriteLine(<span style="color: #800000;">"<span style="color: #800000;">thread {0} result calculated...<span style="color: #800000;">"<span style="color: #000000;">,threadIndex); _doneEvent.Set(); } <span style="color: #0000ff;">public <span style="color: #0000ff;">int Calculate(<span style="color: #0000ff;">int<span style="color: #000000;"> n) { <span style="color: #0000ff;">if (n <= <span style="color: #800080;">1<span style="color: #000000;">) { <span style="color: #0000ff;">return<span style="color: #000000;"> n; } <span style="color: #0000ff;">return Calculate(n - <span style="color: #800080;">1) + Calculate(n - <span style="color: #800080;">2<span style="color: #000000;">); } } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |