如何同时运行2个功能?

时间:2016-04-28 13:39:25

标签: c# asynchronous

我知道这个问题已被回答了一千次,但我仍然无法让这些功能同时发挥作用。这是我的代码:

static void Main(string[] args)
{
    a();
    a();
}

static void a()
{
    string sampleString = "a";
    Console.WriteLine(sampleString);

    for (int i = 0; i < 10; i++)
    {
        System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.1));
        Console.SetCursorPosition(0, Console.CursorTop -1);
        sampleString = " " + sampleString;
        Console.WriteLine(sampleString);
    }
}

该函数只写字母'a',0.1秒后在其后面添加一个空格,并不复杂。功能结束后,它再次做同样的事情。我希望两个函数同时工作,第一行中的第一个函数和第二行中的第二个函数。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用Parallel类:

static void Main(string[] args)
{
    Parallel.Invoke(a,a);
}

您的功能将同时运行。

答案 1 :(得分:0)

一个简单的解决方案是创建两个线程,启动它们并等待它们完成。针对您的具体问题:

static void Main(string[] args)
{
    var t1 = new Thread(a); t1.Start();
    var t2 = new Thread(a); t2.Start();
    t1.Join(); t2.Join();
}

但是,当然,这并没有解决你的初始问题,写入控制台的不同行,因为a函数不知道,要写入哪一行。您可以通过添加带行号的参数来解决此问题。

此外,您必须通过锁保护您的控制台输出,因为它是多个源将数据写入的单个目标,如果未正确同步,可能会导致不一致。所以我真的建议你阅读一些关于多线程的教程。