【问题标题】:console.writeline within Task does not work任务中的console.writeline 不起作用
【发布时间】:2017-07-08 22:26:03
【问题描述】:

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

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

能否请您指出我做错了什么。

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

            }
        }

【问题讨论】:

    标签: c# multithreading httptaskasynchandler


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多