전 세계적으로 선언 된 목록이 있습니다. foreach 루프를 사용하여 데이터를 가져 와서 특정 레코드로 작업하기 위해 스레드 을 만듭니다. 각 스레드는 하나의 데이터로만 작업해야합니다. 하지만 그 스레드와 함께 작업 할 때 스레드는 여러 번 여러 데이터로 작동합니다. 몇 번이나 동일한 데이터가 두 번 있습니다. 스레드의 동기화 방법이 있습니까? 내 필요가 : 작업이 완료되면 각 스레드가 해당 특정 값으로 열리고 닫힙니다.. 적절한 해결책을 제안하십시오. 아래 내 코드의 세부 사항을 확인하십시오 :foreach 내에서 호출 할 때 C# 스레드를 동기화
이foreach (string[] OutBoxFields in OutboxList)
{
// default value of OutBoxFields[6] is QUE. Values are: a,b,c,d,e
Console.WriteLine("From foreach loop: Data:" + OutBoxFields[2] + "|Status:" + OutBoxFields[6] + "\n");
Thread OutboxThread = new Thread(() => OutboxThreadProcessor(OutBoxFields));
OutboxThread.Start();
}
스레드 방법은 :
static void OutboxThreadProcessor(string[] OutBoxFields)
{
string var = "a";
if (OutBoxFields[2] == var)
OutBoxFields[6] = "SENT";
Console.WriteLine("From Thread Method: Data:" + OutBoxFields[2] + "|Status:" + OutBoxFields[6] + "\n");
}
을 확인
public static List<string[]> OutboxList = new List<string[]>();
목록 및 오픈 스레드에서 데이터를 가져 오기 :
세계적으로 목록을 선언 작업 완료시 배열 :
foreach (string[] NewOutBoxFields in OutboxList)
{
Console.WriteLine("From new foreach:" + NewOutBoxFields[2] + "|" + NewOutBoxFields[6] + "\n");
}
전류 출력 :
From foreach loop: Data:c|Status:QUE
From foreach loop: Data:d|Status:QUE
From foreach loop: Data:a|Status:QUE
From foreach loop: Data:e|Status:QUE
From Thread Method: Data:e|Status:QUE
From Thread Method: Data:e|Status:QUE
From foreach loop: Data:b|Status:QUE
From Thread Method: Data:e|Status:QUE
From Thread Method: Data:b|Status:QUE
From Thread Method: Data:b|Status:QUE
From new foreach:c|QUE
From new foreach:d|QUE
From new foreach:a|QUE
From new foreach:e|QUE
From new foreach:b|QUE
예상 출력 :
From foreach loop: Data:c|Status:QUE
From Thread Method: Data:c|Status:QUE
From foreach loop: Data:d|Status:QUE
From Thread Method: Data:d|Status:QUE
From foreach loop: Data:a|Status:QUE
From Thread Method: Data:a|Status:SENT
From foreach loop: Data:e|Status:QUE
From Thread Method: Data:e|Status:QUE
From foreach loop: Data:b|Status:QUE
From Thread Method: Data:b|Status:QUE
From new foreach:c|QUE
From new foreach:d|QUE
From new foreach:a|SENT
From new foreach:e|QUE
From new foreach:b|QUE