为什么控制台上没有打印?

时间:2017-08-11 12:26:08

标签: c# async-await

我创建了2个打印x和y 100次的方法。我希望他们运行并发,我希望输出是xxxxyxyxyyyxyyxyx ...这样的sthg。 它不打印任何东西。我在这里错过了一些逻辑吗?

using System;
using System.Threading.Tasks;

namespace ConsoleApplication32
{
    internal class Program
    {
        public static async Task<int> Print1()
        {
            await Task.Run(() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    Console.Write("x");
                }
            });

            return 1;
        }

        public static async Task<int> Print2()
        {
            await Task.Run(() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    Console.Write("y");
                }
            });

            return 1;
        }

        public static void Run()
        {
            Task<int> i = Print1();
            Task<int> k = Print2();
        }

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

2 个答案:

答案 0 :(得分:5)

尝试了你的代码并且运行得很好。可能你认为它不起作用,因为控制台窗口关闭得非常快。在主要广告中添加Test1

Console.ReadLine()

答案 1 :(得分:2)

问题在于您没有等待任务完成,因此程序正在终止(不再需要同步代码阻止)。

如果您希望任务同时运行,请改为执行此操作:

public static void Run()
{
    Task<int> i = Print1();
    Task<int> k = Print2();
    Task.WaitAll(i, k);
}

等待完成此任务的另一种方法是:

public static async Task Run()
{
    Task<int> i = Print1();
    Task<int> k = Print2();
    await Task.WhenAll(i, k);
}

public static void Main(string[] args)
{
    Run().GetAwaiter().GetResult();
}