如何在c#中的第一个和第二个方法之后执行第三个方法

时间:2015-10-24 19:08:37

标签: c# .net multithreading .net-4.0 task-parallel-library

我使用Task类在线程中运行两个方法。我有第三个在主线程中执行的方法。我希望在第一种和第二种方法之后执行第三种方法。如何在以下代码中执行此操作。在Firstmethod()Secondmethod()仅执行Thirdmethod()之后

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);
    }
}

2 个答案:

答案 0 :(得分:4)

使用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();
}

答案 1 :(得分:1)

虽然Jakub的答案是正确的,但它可能更有效率。使用Task.WaitAll阻塞线程,而其他2个线程执行第一个和第二个操作。

不是阻止该线程,而是可以使用它来执行其中一个方法,然后才阻止另一个方法。这只会使用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();
}