我已经写以下代码以执行某些并发HTTP发布和文件归档:通过HTTP这是线程代码做我认为是什么?
Dim t1 As New Threading.Thread(New Threading.ThreadStart(AddressOf ProcessNTSMessageQueue))
Dim t2 As New Threading.Thread(New Threading.ThreadStart(AddressOf ProcessNTSMessageQueue))
Dim t3 As New Threading.Thread(New Threading.ThreadStart(AddressOf ProcessSuccessfulNTSMessageQueue))
t1.Start()
t2.Start()
t3.Start()
t1.Join()
t2.Join()
t3.Join()
我有两个线程(1 & 2)读取XML的消息的队列和张贴消息发送到web服务器。一旦发布消息,它将从此队列中出列,并添加到第二个队列中。线程3读取该队列,并简单地将XML写入文件。
我期望看到XML文件逐渐显示为处理消息队列(有时消息队列可能需要大约40分钟才能处理)。我实际看到的是没有XML文件出现。我是我误解了代码?
*编辑。以下是四种相关线程方法的代码:
Private Sub ProcessNTSMessageQueue()
While True
Dim msg As String = Nothing
SyncLock _MessageQueue
If _MessageQueue.Count > 0 Then
msg = _MessageQueue.Dequeue()
Else
Exit Sub
End If
End SyncLock
'Post the message
'it's important to do this outside lock()
If msg <> Nothing Then
Me.PostXMLToNTS(msg)
End If
End While
End Sub
Private Sub ProcessSuccessfulNTSMessageQueue()
While True
Dim msg As String = Nothing
SyncLock _SentMessageQueue
If _SentMessageQueue.Count > 0 Then
msg = _SentMessageQueue.Dequeue()
Else
Exit Sub
End If
End SyncLock
'Post the message
'it's important to do this outside lock()
If msg <> Nothing Then
Me.ArchiveXMLAsFile(Guid.NewGuid.ToString, msg)
_SuccessfulMessageCount += 1
End If
End While
End Sub
Private Function PostXMLToNTS(ByVal XMLString As String) As Boolean
Try
Dim result As Net.HttpStatusCode = NTSPoster.PostXml(XMLString, _Settings.NTSPostURLCurrent, _Settings.NTSPostUsernameCurrent, _Settings.NTSPostPasswordCurrent)
Select Case result
Case Net.HttpStatusCode.Accepted, Net.HttpStatusCode.OK 'Good
If _SentMessageQueue Is Nothing Then
_SentMessageQueue = New Queue(Of String)
End If
_SentMessageQueue.Enqueue(XMLString)
Return True
Case Else 'Probably bad
If _FailedMessageQueue Is Nothing Then
_FailedMessageQueue = New Queue(Of String)
End If
_FailedMessageQueue.Enqueue(XMLString)
Return False
End Select
Catch ex As Exception
Throw
End Try
End Function
Private Sub ArchiveXMLAsFile(ByVal name As String, ByVal XML As String)
Try
'Create directory in archive location based on todays date
Dim dir As New DirectoryInfo(Me.TodaysXMLArchiveLocation)
'If the directory does not already exist then create it
If Not dir.Exists Then
dir.Create()
End If
Dim FileName As String = String.Format("{0}.xml", name)
Using sw As StreamWriter = New StreamWriter(Path.Combine(dir.FullName, FileName))
sw.Write(XML)
sw.Close()
End Using
Catch ex As Exception
Throw
End Try
End Sub
您将需要显示“ProcessNTSMessageQueue”和“ProcessSuccessfulNTSMessageQueue”函数的代码。 – 2009-11-18 15:31:38
感谢大家的帮助,这是我第一次进入线程,我不确定我在这个阶段做了什么! – Simon 2009-11-20 13:42:21