Writing to the console using Task.Run() fails

后端 未结 2 1814
粉色の甜心
粉色の甜心 2021-02-19 20:51

A colleague of mine found an issue with our code and it took a while to hunt down exactly what was happening, but it can be best demonstrated by this simple example:

<         


        
2条回答
  •  庸人自扰
    2021-02-19 21:24

    I have a suspicion as to what's going on. What I've observed:

    • If you do anything with the console's output before starting the ReadKey, it's fine. This includes fetching Console.Out but not using it
    • If you put a delay in so that the Console.WriteLine call starts before the Console.ReadKey call, it's fine (and you can have multiple WriteLine calls while ReadKey is waiting

    I suspect that the first operation to use the console acquires a lock for initialization (to avoid it being initialized twice) and that the ReadKey method keeps hold of the lock until a key has been read. That would certainly explain every program I've run so far.

    The operations which perform the hypothesized initialization are interesting though - reading Console.Out "fixes" the issue, but reading from Console.In doesn't.

    I suspect that ReadKey initializes the output because the value is still echoed to the console... but I wouldn't like to swear to it.

    Interestingly, using Console.ReadLine() instead of Console.ReadKey() doesn't cause the problem in the first place.

提交回复
热议问题