gpt4 book ai didi

c# - 具有基于任务的异步模式的 UDP 监听器

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:23 26 4
gpt4 key购买 nike

我正在摆弄一个 UDP 监听器和 TAP。

我有一个类负责监听传入的 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() 调用可以使线程保持事件状态。

最佳答案

Is this correct? I am a bit worried that I might exhaust the thread pool, because the thread is being kept alive by spawning a new Listen() call.

是的,完全是正确的,此操作不受 CPU 限制,它受 IO 限制。因此,线程池中根本没有阻塞等待操作完成的线程。

有一个线程等待网络请求完成,但它在所有网络请求之间共享(如 UI 线程)。在 Windows 上称为 IO 完成端口线程。当网络请求完成时,操作系统中的中断处理程序将一个作业添加到 IO 完成端口的队列中。执行1000个网络请求,请求全部启动,响应到达,依次由单个IO完成端口处理。

关于c# - 具有基于任务的异步模式的 UDP 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13084596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com