Ste*_*ger 4 c# vb.net multithreading locking
这段代码出了什么问题?
我总是得到一个
从不同步的代码块调用对象同步方法
例外
System.Threading.Monitor.Exit(m_sqlConnection)
Run Code Online (Sandbox Code Playgroud)
但是......无论我将Monitor语句放在try-catch-finally-block内部还是外部,无论如何组合,我总是得到这个异常.
也就是说,在我编译代码之后.如果我在获得第一个异常后让它再次运行,它运行正常...它总是在重新编译之后......
Public Shared Function GetDataTable(ByRef strSQL As String, ByRef dt As System.Data.DataTable, Optional ByRef strTableName As String = "ThisTable") As Integer
Dim daQueryTable As System.Data.SqlClient.SqlDataAdapter = Nothing
Try
System.Threading.Monitor.TryEnter(m_sqlConnection, 5000)
If isDataBaseConnectionOpen() = False Then OpenSQLConnection()
daQueryTable = New System.Data.SqlClient.SqlDataAdapter(strSQL, m_sqlConnection)
dt = New System.Data.DataTable(strTableName)
daQueryTable.Fill(dt)
Catch ex As Exception
Log(ex)
Return -1
Finally
m_sqlConnection.Close()
System.Threading.Monitor.Exit(m_sqlConnection)
daQueryTable.Dispose()
daQueryTable = Nothing
End Try
Return dt.Rows.Count
End Function ' GetDataTable
Run Code Online (Sandbox Code Playgroud)
C#版本:
public static int GetDataTable(ref string strSQL, ref System.Data.DataTable dt, ref string strTableName = "ThisTable")
{
System.Data.SqlClient.SqlDataAdapter daQueryTable = null;
try {
System.Threading.Monitor.TryEnter(m_sqlConnection, 5000);
if (isDataBaseConnectionOpen() == false)
OpenSQLConnection();
daQueryTable = new System.Data.SqlClient.SqlDataAdapter(strSQL, m_sqlConnection);
dt = new System.Data.DataTable(strTableName);
daQueryTable.Fill(dt);
} catch (Exception ex) {
Log(ex);
return -1;
} finally {
m_sqlConnection.Close();
System.Threading.Monitor.Exit(m_sqlConnection);
daQueryTable.Dispose();
daQueryTable = null;
}
return dt.Rows.Count;
} // GetDataTable
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6512 次 |
| 最近记录: |