我有一个ASP.Net应用程序(实际上Lightswitch涉及到这里,不确定在这种情况下它是否重要)。
我有以下代码。它从LogIn.aspx开始,它在OnLoggedIn事件上调用RegisterUser。
//example code
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView){
let customCallout = CustomCallout(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width * 0.8, height: 50))
customCallout.backgroundColor = UIColor.red //your color here
view.addSubView(customCallout)
//adjust any param you need here
}
异步代码死锁。我试图在一个单独的帖子中运行它,我不是故意等待它。
将对RegisterUserAsync的调用更改为此(在启动线程之前适当捕获SQL):
Task.Run(()=> RegisterUserAsync(userName,user.FullName, user.ClientId,user.ClientName));
解决问题。我理解为什么调用Task.Run解决了你想要等待而没有死锁的异步调用,但我不明白为什么在这种情况下发生了死锁。 (Initializing变量为false - 我记录了一个调试语句以确保,因此它实际上从未实际执行过Thread.Yield,但我不知道为什么会影响它。)
为什么旧代码中发生了死锁?