Я новичок в потоке, пытаюсь научиться этому на ходу. Пожалуйста, не делайте никаких предположений и попытайтесь объяснить концепции и правила потоков, которые могут показаться очевидными.
У меня есть модуль (статический класс) следующим образом:
Модуль Main
Private ReadOnly _dbConn As SqlClient.SqlConnection
Public ReadOnly Property DBConn() As SqlClient.SqlConnection
Get
Debug.Print("Accessing DBConn")
Return _dbConn
End Get
End Property
Sub New()
_dbConn = New SqlClient.SqlConnection(My.Resources.ConnectionString)
End Sub
Конечный модуль
Во всем приложении, когда я обращаюсь к DBConn в том же потоке, оно работает как положено. Однако позже я создал фоновый рабочий, который пытается получить доступ к DBConn, и ничего не происходит, поток просто зависает (фоновый рабочий). Я не получаю распечатку, и приложение не продолжается. Фоновый рабочий поток не продолжается после этой точки, поэтому поток никогда не завершается. Я не получаю никаких исключений, и я не могу отладить в Visual Studio (Visual Studio зависает).
Я предполагаю, что это вопрос из двух частей: почему я не могу получить доступ к DBConn из другого потока и почему он зависает, не выдавая мне исключение threadAccess? Кроме того, почему Visual Studio зависает (я предполагаю, что он зависает, потому что поток висит)?
Обратите внимание: я не спрашиваю о практике. Я знаю, что мне не следует делить одно и то же соединение, а возвращать новое. В этом конкретном приложении это безопасно, поскольку (хотя я выполняю его в фоновом потоке) согласно потоку приложения, соединение может быть доступно только по одному за раз. Я просто хочу знать, почему он висит на волоске.