2015-10-24 31 views
0

我有兩個方法使用Task類在線程中運行。我有第三個方法在主線程中執行。我希望第三種方法在第一種和第二種方法之後執行。如何在下面的代碼中執行此操作。 Firstmethod()Secondmethod()後只Thirdmethod()要執行如何執行c#中的第一個和第二個方法後的第三個方法

static void Main(string[] args) 
{ 
    Task.Factory.StartNew(() => { Firstmethod(); 
    }); 
    Task.Factory.StartNew(() => { Secondmethod(); 
    }); 

     Thirdmethod(); 
    Console.ReadLine(); 
} 

static void Firstmethod() 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     Console.WriteLine(i); 
    } 
} 
static void Secondmethod() 
{ 
    for (int i = 10; i < 20; i++) 
    { 
     Console.WriteLine(i); 
    } 
} 
static void Thirdmethod() 
{ 
    for (int i = 20; i < 30; i++) 
    { 
     Console.WriteLine(i); 
    } 
} 
+1

您必須等待第一個和第二個任務。更好地使用Task.WaitAll –

+0

搜索AutoResetEvent/ManualResetEvent – SkryptX

+0

我使用.net 4.0不是4.5可以任何機構發佈代碼來執行此 – peter

回答

3

使用Task.WaitAll。它在.NET 4.0中可用。

static void Main(string[] args) 
{ 
    Task t1 = Task.Factory.StartNew(() => { 
     Firstmethod(); 
    }); 
    Task t2 = Task.Factory.StartNew(() => { 
     Secondmethod(); 
    }); 

    Task.WaitAll(t1, t2); 
    Thirdmethod(); 
    Console.ReadLine(); 
} 
+0

這工作,thnaks,有一個美好的一天:) – peter

1

儘管Jakub的回答是正確的,但它可能更有效。使用Task.WaitAll會阻塞該線程,而其他兩個線程則執行第一個和第二個操作。

而不是阻止該線程,您可以使用它來執行其中一種方法,然後才阻塞另一個。這將只使用2個線程而不是3個,甚至可能根本不會阻止:

static void Main() 
{ 
    Task task = Task.Factory.StartNew(() => FirstMethod()); // use another thread 
    SecondMethod(); // use the current thread 
    task.Wait(); // make sure the first method completed 
    Thirdmethod(); 
} 
相關問題