聊一聊坑人的 C# MySql.Data SDK - 一线码农

💡 原文中文,约7500字,阅读约需18分钟。
📝

内容提要

MySql.Data驱动导致线程饥饿问题,因为其同步方法实际上是异步包装,导致线程池耗尽。建议使用纯异步写法或回退至低版本以避免此问题。

🎯

关键要点

  • MySql.Data驱动导致线程饥饿问题,程序卡死无响应。
  • 线程饥饿的原因是MySql.Data的同步方法实际上是异步包装。
  • 升级MySql.Data版本后,保留了同步方法,导致线程池耗尽。
  • 使用windbg分析dump,发现线程池中线程全部处于运行状态,且无可用线程。
  • 故障现象显示线程卡在ExecuteScalarAsync方法的结果获取上。
  • 解决方法包括使用纯异步写法或退回到低版本的MySql.Data。
  • MySql.Data项目在GitHub上未开issue栏,无法让社区开发者介入。

延伸问答

MySql.Data驱动导致线程饥饿的原因是什么?

MySql.Data的同步方法实际上是异步包装,导致线程池耗尽,从而引发线程饥饿问题。

如何解决MySql.Data导致的线程饥饿问题?

可以使用纯异步写法或退回到低版本的MySql.Data以避免此问题。

MySql.Data的哪些版本存在线程饥饿问题?

升级后的MySql.Data版本保留了同步方法,导致线程池耗尽,存在此问题。

使用windbg分析dump时发现了什么问题?

分析显示线程池中所有线程都在运行状态,但无可用线程,导致任务积压。

MySql.Data项目在GitHub上有什么限制?

MySql.Data项目在GitHub上未开issue栏,无法让社区开发者介入。

MySql.Data的同步方法是如何实现的?

MySql.Data的同步方法是通过异步方法的简单包装实现的,这种方式容易导致线程饥饿。

➡️

继续阅读