Я занимаюсь разработкой веб-приложения ASP.Net, которое использует MySQL через MySQL-Provided Connector / NET, который является ADO.Net-совместимым интерфейсом. Насколько я понимаю, ASP.Net заключается в том, что параллельные запросы будут обрабатываться в отдельных потоках, поэтому мой код должен быть поточно-ориентированным.
Я не могу найти в документации MySQL ничего, что бы однозначно объясняло, как использовать API в поточно-ориентированном режиме. Документация по MySqlCommand гласит:
Открытые статические (Shared в Visual Basic) члены этого типа безопасны для многопоточных операций. Члены экземпляра не гарантируют поточнобезопасность
Мое буквальное понимание этого состоит в том, что безопасно разделять объект соединения между потоками, при условии, что я не вызываю нестатические методы одновременно. Другими словами, я должен быть в состоянии сделать:
IDbConnection myConnection = GetSomeConnection(); // Returns a shared object
IDbCommand cmd;
lock(myConnection)
{
cmd = myConnection.CreateCommand();
}
// Some code using cmd
Однако меня беспокоит, что я еще не нашел документацию, подтверждающую, что это безопасно, только отсутствие документации, подтверждающей, что это небезопасно.
Если это небезопасно, рекомендуется ли использовать локальные потоки соединения или мне следует реализовать какой-либо пул соединений?