다른 스레드 생성 :예외 내가 최근에이 코드를 본 적이
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 [email protected], [email protected], [email protected], [email protected] 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가 발생할 수있는 경우 specificaly 그 코드에 대해 궁금하고 동일한 방법으로 다른 스레드를 다시 실행하여 스레드 목록에 한 번 더 추가하십시오. 이전에 예외가 발생한 스레드에 대한 검사가 끝나고 중단되어야합니다. 그런 다음 목록에서 제거하고 새 목록을 추가하십시오.
귀하의 기여가 정말 도움이됩니다.
감사합니다.
처음으로이 코드를 보았습니다. http : // ayende.co.kr/blog/131073/memorable-code 코드에있는 많은 내용에 대한 의견이 많습니다. –