用Parallel.For()和Parallel.For ()方法實現並行運行迭代


  Parallel類是.NET 4中新增的抽象線程類。如果你開發用的是VS2008或更低版本,那么就直接關閉吧,下面兩個示例用了匿名委托,如果不知道匿名委托的語法,那么先去簡單了解一下,不然很難理解示例代碼。

  Parallel.For()方法類似於C#的for循環語句,也是多次執行一個任務。使用Parallel.For()方法,可以並行運行迭代。迭代的順序沒有定義。

  在For()方法中,前兩個參數定義了循環的開頭和結束。下面代碼示例從0迭代到9。第三個參數是一個Action<int>委托。整數是循環的迭代次數,該參數被傳遞給Action<int>委托引用的方法。Parallel.For()方法的返回類型是ParallelLoopResult結構,它提供是否結束的信息。

            ParallelLoopResult result = Parallel.For ( 0, 10, i =>{
               Console.WriteLine ( "{0}, task: {1} , thread: {2}",i,Task.CurrentId ,Thread.CurrentThread.ManagedThreadId );
               Thread.Sleep ( 10 );
            } );
            Console.WriteLine ( result.IsCompleted);

  在Parallel.For()的方法體中,把索引、任務標識符和純種標識符寫入控制台中。從輸出可以看出,順序是不能保證的。大家可以自行多次測試。

  For()方法的泛型版本還接受3個委托參數。在下面的示例中,實現了For()的泛型方法,別看這么多,合起來就一句,分開來看比較清晰而已。

            Parallel.For<string> ( 0, 20,
                ( ) => {
                    Console.WriteLine ( "init thread {0},  task {1}", Thread.CurrentThread.ManagedThreadId, Task.CurrentId );
                    return string.Format ( "t: {0}", Thread.CurrentThread.ManagedThreadId );
                },
                (i,pls,str) => {
                    Console.WriteLine ( "body  i {0}  str1 {1}  thread {2}  task {3}",i,str,Thread.CurrentThread.ManagedThreadId ,Task.CurrentId );
                    return string.Format ( "i {0}", i );
                },
                (str1) => {
                    Console.WriteLine ( "finally {0}",str1 );
                }
                );


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM