2010-06-08 53 views
0

考慮下面的程序它是多任務處理嗎?

myThread = new Thread(
         new ThreadStart(
          delegate 
          { 
           Method1(); 
           Method2(); 
          } 
          ) 
          ); 

難道2個線程越來越稱爲平行(多任務)或單個線程順序調用方法?

這很緊急。

+3

關於基本理解+「緊急」的問題 - 這是一種考試問題嗎? – 2010-06-08 07:16:50

+1

@Konrad,我們是不是應該加一個'urgent'標籤?:) – bakkal 2010-06-08 07:55:32

+1

@Bakkal:好主意。任何具有該標籤的問題都會自動隱藏在起始頁面上。 ;-) – 2010-06-08 08:00:04

回答

6

這是一個單線程。

Method2()Method1()結束前不會被調用。

如果你想Method1()Method2()是每一個單獨的線程,你可以這樣做:

myThread1 = new Thread(new ThreadStart(Method1)); 
myThread2 = new Thread(new ThreadStart(Method2)); 

,並開始他們:

myThread1.Start(); 
myThread2.Start(); 

現在既可以同時運行。

有用的資源:

+0

是否有可能使用相同的代理風格爲同一個多線程創建一個多線程..我的意思是,如果我激發2 sepearte委託,它會是多線程的。 – Newbie 2010-06-08 07:10:23

+0

請您爲了理解 – Newbie 2010-06-08 07:10:55

+0

NB寫一個僞代碼(粗略的)。在第二種情況下,不需要匿名方法(由'delegate'關鍵字引入):'new Thread(new ThreadStart(Method1));' – 2010-06-08 07:25:45

4

難道2個線程越來越 平行叫(多任務)

你可以憑經驗檢查:申報了methodA Method1Method2這樣:

public void Method1() { 
    for (int i = 0; i < 10; i++) { 
     System.Console.WriteLine ("Method1: {0}", i); 
     Thread.Sleep (2000); // 2 seconds 
    } 
} 

public void Method2() { 
    for (int i = 0; i < 10; i++) { 
     System.Console.WriteLine ("Method2: {0}", i); 
     Thread.Sleep (2000); // 2 seconds 
    } 
} 

然後看看它們是否按順序或並行執行。

或者單個線程按順序調用 方法?

您可以通過分析方式檢查它,例如。你創建了多少個Thread對象?你傳遞給創建線程的方法是什麼?

您只創建一個線程對象,這個線程來執行這個匿名方法:

delegate { 
    Method1(); 
    Method2(); 
} 

該匿名方法,因爲可以清楚地看到,將執行Method1,然後Method2

1

C#3:創建並啓動單獨的線程。要等待它們完成,請在它們的全部上調用Thread.Join。 ()=> Method1(),()=> Method2());方法2()方法2()方法2()方法2()

+0

用於多任務處理的手段(c#3.0)我需要做thread1 = Thread(new ThreadStart(Method1)); thread2 = Thread(new ThreadStart(Method2));然後thread1.join(); thread2.join(); – Newbie 2010-06-08 07:41:49

+0

是的,這是正確的。 – 2015-02-26 18:24:18