一次Task.Run异常问题的排查
最近在测试一个功能代码时发现一个非常奇怪的问题,主要是Task.Run引起一些不符合逻辑的错误,以下针对这一问题排查的总结。 问题代码 可以建个控制台程序来运行以下代码 class Program { static User user = new User(); static void Main(string[] args) { for (int i = 0; i < 50; i++) { Task.Run(user.Init); } System.Threading.Thread.Sleep(-1); } } public class User { private bool mInit = false; private Task OnInit() { Console.WriteLine("User init"); System.Threading.Thread.Sleep(1000); return Task.CompletedTask; } public void Init() { lock (typeof(User)) { if (!mInit) { var task = Task.Run(this.OnInit); if (!task.Wait(5000)) { throw new TimeoutException("user init error!"); } mInit