gpt4 book ai didi

c# - 捕获在 UDPClient.EndReceive 抛出的 ObjectDisposedException

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

我在 Windows 服务中使用异步回调来接收网络上的 UDP 数据广播。

回调使用 UDPClient.EndReceive() 方法来结束挂起的异步接收。在服务 OnStop() 方法期间,我 UDPClient.Close() UDP 客户端。在此之后,我经常在下一次调用异步回调中的 EndReceive() 时收到 ObjectDisposedException,这是在另一个线程上访问的。

很明显,我可以通过 try { UDPClient.EndReceive(...) 在接收回调中捕获此异常。 } 但我想确信捕获的 ODE 是在关闭服务时抛出的(如预期的那样),而不是出于其他原因。我可以创建一个 bool 标志来设置并指示服务何时停止,并在 catch block 中检查它,但是我觉得我忽略了一个更优雅的解决方案。

如何确保我捕获的 ODE 是预期的异常,而不是真正意外的异常?

最佳答案

我最终使用了一个 bool 标志来指示服务正在停止。 serviceStopping 标志在服务的 OnStop() 方法中设置为 true,并在捕获 ObjectDisposedException 时进行检查:

try 
{
datagram = client.EndReceive(arClient, ref remoteEP);
}
catch (ObjectDisposedException)
{
//if the service is stopping this is expected
if(serviceStopping)
{
//return without further processing
//in the receiveCallback
return;
}

//otherwise rethrow the exception
throw;
}

关于c# - 捕获在 UDPClient.EndReceive 抛出的 ObjectDisposedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31555339/

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