2
我在搞亂UDP偵聽器和TAP。具有基於任務的異步模式的UDP偵聽器
我有一個類負責監聽傳入的UDP並可以啓動和停止。 在start()方法簡單地調用下面的方法
private async void Listen()
{
var resp = await _udpClient.ReceiveAsync().ConfigureAwait(continueOnCapturedContext: false);
var eventHandler = PacketReceived;
if (eventHandler != null)
eventHandler(this, new UdpPacketReceivedEventArgs(resp));
if (_running)
Listen();
}
這是正確的嗎?我有點擔心我可能會耗盡線程池,因爲線程正在通過產生一個新的Listen()調用而保持活動狀態。
IO完成端口沒有線程「等待」IO完成。線程「等待」是一個正在使用的線程。重疊IO擁有自己的線程池,並在IO完成時使用其中一個線程。 –
@PeterRitchie:謝謝你的評論,你能解釋一下這個東西嗎?好像我沒有深刻的理解。或者甚至你可以爲這個問題發佈另一個更正確的答案? –
感謝您的回答。至少運行任務的線程還活着?當它被告知再次運行Listen()時,它爲什麼會死? – kasperhj