1

我正在学习基于任务 aysny 的编程,并且无法使此代码正常工作。控制台只打印一次消息然后消失。

如果我删除读取行并运行程序(不是调试模式),控制台只会出现消息,说按一个键继续。当我调试并将调试器放入 console.write 时,它​​可以正常工作一段时间,然后控制台窗口消失并再次重新启动。如果我使用 for loop <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();

            }
        }
4

1 回答 1

3

您的主线程不会阻塞,因此会立即退出。从某种意义上说,您将不得不“一直等待”并等待multitasker,但您实际上不能这样做,如稍后所见。

所以首先你返回一个任务multitasker

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

问题是您不能使(入口点)异步,因此您需要通过调用返回的任务Main()来阻止该线程Wait()

static void Main(string[] args)
{
    multitasker().Wait();
}
于 2017-02-19T18:35:23.053 回答