Net6中遇到的一个很奇葩的问题
先来看一段代码,是控制台应用程序
internal class Program{static void Main(string[] args){Test().Wait();}private static async Task Test(){await Task.Run(() =>{Debug.WriteLine("线程内输出");});Debug.WriteLine("线程外输出");}}
执行,然后在输出窗口得到
线程内输出
线程外输出
没毛病吧。
再来看第二段代码,是winform应用程序
internal static class Program{[STAThread]static void Main(){ApplicationConfiguration.Initialize();Test().Wait();var form = new Form1();Test().Wait();Application.Run(form);Test().Wait();}private static async Task Test(){await Task.Run(() =>{Debug.WriteLine("线程内输出");});Debug.WriteLine("线程外输出");}}
其中Form1为新建的窗体类。除了VS自己生成的代码以外,我一个字符都没改。
执行,然后在输出窗口得到
线程内输出
线程外输出
线程内输出
并且,Form1窗口也没有正常弹出。
显然在第二次调用Test()的时候,卡住Task线程里,出不来了。
这时候,我们对代码做一下修改。改为
internal static class Program{[STAThread]static void Main(){ApplicationConfiguration.Initialize();Test().Wait();var form = new Form1();Test().Wait();Application.Run(form);Test().Wait();}private static async Task Test(){Task.Run(() =>{Debug.WriteLine("线程内输出");}).Wait();Debug.WriteLine("线程外输出");}}
执行,然后在输出窗口得到
线程内输出
线程外输出
线程内输出
线程外输出
线程内输出
线程外输出
且,Form1窗口正常弹出
以上就是今天遇到的问题。原因未知,且不能理解。
猜测与Form底层代码有关。但是没有深入研究。如果那位大神知道原因,望不吝赐教。