我最近看到了这段代码:
static List<Thread> list = new List<Thread>();
static void Main(string[] args)
{
var lines = File.ReadAllLines(args[0]);
foreach (var line in lines)
{
StartThread(line);
}
Console.WriteLine("JOIN");
foreach (Thread thread in list)
{
thread.Join();
}
Console.WriteLine("END");
Console.ReadKey();
}
static void Upsert(object o)
{
var args = o.ToString().Split(',');
try
{
using (var con = new SqlConnection(Settings.Default.ConnString))
{
var cmd = new SqlCommand
{
Connection = con,
CommandText = "INSERT INTO Accounts VALUES(@p1, @p2, @p3, @p4, @p5)"
};
for (var index = 0; index < args.Length; index++)
{
cmd.Parameters.AddWithValue(@"@p" + (index + 1), args[index]);
}
try
{
con.Open();
cmd.ExecuteNonQuery();
Console.WriteLine("INSERTED");
}
catch (SqlException e)
{
switch (e.Number)
{
case 2627:
cmd.CommandText =
"UPDATE Accounts SET Name=@p2, Email=@p3, Active=@p4, Birthday=@p5 WHERE ID = @p1";
cmd.ExecuteNonQuery();
Console.WriteLine("UPDATED");
break;
case 1205:
StartThread(o); // On exception isn't some Thread handling should happen?
break;
}
}
}
}
}
private static void StartThread(object o)
{
// Is it correct to add another thread to the list again? when exception happens? What about the thread that was running
var t = new Thread(Upsert)
{
Priority = ThreadPriority.Highest,
IsBackground = true
};
list.Add(t);
t.Start(o);
Console.WriteLine("NEW THREAD STARTED");
}
我在线程方面不是那么强,我特别想知道该代码何时可能发生错误 1205 并使用相同的方法再次运行另一个线程,再次添加到线程列表中。如果之前的异常咳嗽线程已完成并中止,不应该检查它吗?然后将其从列表中删除并添加新的?
你的贡献真的很有帮助。
谢谢你。