我试图让设计模式更多一点,我正在建立一个快速测试,以帮助我进一步了解单身模式。然而,我在.net中遇到了一个让我感到困惑的错误,是什么使得它更加怪异,我无法复制这个刚刚添加到我的混淆中的错误。下面的代码并不是世界上最好的代码,但我随机测试了一些东西,以帮助我深入了解。与单身人士死锁错误
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(new ThreadStart(run1));
Thread t2 = new Thread(new ThreadStart(run2));
t1.Priority = ThreadPriority.Lowest;
t1.Start();
t2.Priority = ThreadPriority.Lowest;
t2.Start();
Console.ReadLine();
}
public static void run1()
{
Console.WriteLine("im in run1 \n");
TestSingleton._instance.PopulateCrudItemsProcess();
Thread.Sleep(1000);
Console.WriteLine(TestSingleton._instance.GetStrValue("first", 1000));
}
public static void run2()
{
Console.WriteLine("im in run2 \n");
TestSingleton._instance.PopulateCrudItemsProcess();
Console.WriteLine(TestSingleton._instance.GetStrValue("second", 500));
}
}
sealed class TestSingleton
{
private TestSingleton() { }
public static readonly TestSingleton _instance = new TestSingleton();
public string GetStrValue(string str, int time)
{
return str;
}
public void PopulateCrudItemsProcess()
{
const string proc = "[testdb].[dbo].[tstsproc]";
string _reportingConnStr = ConfigurationManager.ConnectionStrings["reporting"].ConnectionString;
using (SqlConnection conn = new SqlConnection(_reportingConnStr))
{
using (SqlCommand cmd = new SqlCommand(proc, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = 7200;
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
现在发生了什么是该程序崩溃的cmd.ExecuteNonQuery();并表示资源存在僵局。我希望我可以捕捉到实际的错误,但就像我说我只能得到一次错误。根据MS这个代码是一个线程安全的方式来创建一个单身人士。那么对于可能导致错误的任何想法?任何信息非常感谢。
此错误可能来自数据库。你的ExecuteNonQuery在做什么? – 2012-03-17 08:44:42
http://support.microsoft.com/kb/832524 – 2012-03-17 09:00:59