데이터를 수신하고 ConcurrentQueue 문자열로 푸시하는 한 스레드에서 클래스를 실행 중입니다. Enqueue를 사용하여 데이터를 추가하는 중입니다. 큐 길이가 늘어나 데이터가 올바르게 큐에 있다는 것을 알 수 있습니다.VB.Net : 스레드에서 ConcurrentQueue의 항목 검색
다른 스레드에서 실행중인 다른 클래스는 FIFO 단위로 각 데이터 조각을 가져와야합니다. 그러나 단순히 아무것도하지 않습니다.
Dim data As String = Nothing
While Globals.queueMessages.Count > 0
queueMessages.TryDequeue(data)
If (data IsNot Nothing) Then
Console.WriteLine(data)
Else
Console.WriteLine("Failed to dequeue")
End If
End While
뿐만 아니라 카운트를 사용하여 큐의 항목 수를 확인() 나는 또한 너무 IsEmpty 함수를 시도했다 : 여기 이 큐에서 데이터를 끌어해야한다는 루프입니다. 같은 결과!?
C#에서 ConcurrentQueue를 사용하는 것에 대한 기사가 꽤 있지만, VB.Net 예제를 찾지 못해서 조금 붙어 있습니다.
도움말!
업데이트 : 내 While ... End While While Do ... 루프가 작동하지만 아무 일도 일어나지 않을 때 스레드가 묶여 있으므로 권장되지 않습니다. 이 일을 더 우아한 방법이 있습니까?
부울 플래그를 사용하는 것에 대한 멋진 팁을 생각하지 않았습니다. 내 스레드에 제공되는 sleep() 속성이 없습니다. Dim threadParser As Task = Nothing으로 만들고 다음 ThreadParser = Task.Factory.StartNew (Sub() Parser.Process())로 스레드를 시작하면 스레드로 전환하는 것이 더 좋을까요? –
일반 규칙은 스레드 풀 스레드에서 절전 모드가 아닙니다. 그것의 짧은 살았던 것이 그 후에 그것을 위해 간다면. 스레드가 응용 프로그램의 수명 동안 주위에 놀고 다음 전용 스레드를 추가합니다. 스레드를 액세스 system.threading 가져 오기 – FloatingKiwi
스레드는 Windows 응용 프로그램이 오랫동안 기다릴 것입니다. 이상적으로 이것이 며칠 또는 몇 주일 것이므로 스레드로 변환하여 정상적으로 실행 중입니다. 고마워요! –