gpt4 book ai didi

C# await udpClient.ReceiveAsync() 失败并终止程序

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

我正在使用 .NET 4.5.1 运行 C# 控制台应用程序。当我运行以下函数时,下面的 udpClient.ReceiveAsync() 调用会无一异常(exception)地静默终止程序。我该如何调试?

   public async void Run()
{
try
{
var armIpAddress = IPAddress.Parse("239.1.11.1");
using (var udpClient = new UdpClient())
{
udpClient.ExclusiveAddressUse = false;
var ipEndPoint = new IPEndPoint(IPAddress.Any, 12020);
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpClient.ExclusiveAddressUse = false;
udpClient.Client.Bind(ipEndPoint);
udpClient.JoinMulticastGroup(armIpAddress);

while (true)
{
var result = await udpClient.ReceiveAsync();
//...
}
}
catch (Exception x)
{
Console.WriteLine(x.Message);
}
}

最佳答案

await udpClient.ReceiveAsync() 的调用不会终止程序,也不会静默失败。

鉴于这种情况正在发生,我假设您有这样的事情:

public static void Main(string[] args)
{
...
Run();
}

async void 方法中,一旦到达 await 调用,控制权就会返回给父级,因此程序流程如下:

public static void Main(string[] args)
{
...
var armIpAddress = IPAddress.Parse("239.1.11.1");
using (var udpClient = new UdpClient())
{
udpClient.ExclusiveAddressUse = false;
.......

while (true)
{
return;
}
}
}

因此,由于没有进一步的阻塞代码,程序结束。

要使其如您所愿工作,请将代码更改为:

public static void Main(string[] args)
{
...
Run().Wait();
}

public async Task Run() { ... }

关于C# await udpClient.ReceiveAsync() 失败并终止程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45063820/

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