任务中的console.writeline不起作用。

3

我正在学习基于任务异步编程的IT技术,但是无法让这段代码正常运行。控制台只打印了一次消息就消失了。

如果我删除读取行并运行程序(非调试模式),控制台只会出现一个消息,提示按任意键继续。当我进行调试并将调试器放在console.write上时,它可以正常工作一段时间,然后控制台窗口会消失并重新启动。如果我使用for循环<10000而不是while,则行为也相同。

请问您能否建议我哪里出错了。

static void Main(string[] args)
        {
            multitasker();

        }

       static async void   multitasker()
        {
            Task task1 = new Task(PrintMessageA);
            task1.Start();
            await task1;            
        }

        static void PrintMessageA()
        {
          while(true)
            {
                Console.WriteLine("Message from A");
                Console.ReadLine();

            }
        }
1个回答

4

你的主线程没有阻塞,因此立即退出。在某种意义上,您必须“一直等待”,并等待multitasker,但是您实际上无法这样做,如后面所示。

因此,首先在multitasker中返回一个任务。

static async Task multitasker()
{
    Task task1 = new Task(PrintMessageA);
    task1.Start();
    await task1;            
}

问题在于您无法将 Main() (入口点) 设为 async,因此您需要通过调用返回的 Task 上的 Wait() 方法来阻止该线程。
static void Main(string[] args)
{
    multitasker().Wait();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接