Xamarin Android try / catch не работает с udp.SendAsync () - PullRequest
0 голосов
/ 22 октября 2018

Я создал простое приложение, которое взаимодействует по UDP, с конечной точкой на IP-адресе, указанном пользователем.Он использует System.Net.Sockets.UdpClient, который довольно хорошо работает на Android - я могу отправлять и получать пакеты довольно стабильно.С одним вопиющим исключением ... Исключения.Кажется, полностью уклоняется try/catch;я предполагаю, что основные ошибки реализации настолько сложны, что ошибки не могут быть обнаружены.Например:

UdpClient Udp { get; protected set; }

Udp.Connect("192.168.1.254"); // Any bad IP
try
{
    int bytesSent = await udp.SendAsync(bytes, bytes.Length);
}
catch(Exception ex)
{
    return null;
}

При тестировании на реальном устройстве Android, если пользователь вводит неверный IP-адрес, следующий шаг проверки связи с этим IP-адресом по протоколу UDP последовательно уничтожает приложение.Поведение совершенно странное тоже.Например, если я произвожу вызов в фоновом потоке, например, так:

Task.Run(ping).ConfigureAwait(false);

protected async Task ping()
{
    try
    {
        await checkIp();
    }
    catch(Exception ex)
    {
    }
}

Тогда есть некоторые сценарии, в которых я могу получить исключение - но только во внешнем улове!Бросок происходит при вызове SendAsync во внутренней попытке, и исключение составляет System.Net.Sockets.SocketException с типом ConnectionRefused!В зависимости от того, как именно я прохожу через это, иногда это попадается туда, иногда совсем нет;когда это совсем не так, приложение просто взрывается.Безумие!

Это ожидаемое поведение?Xamarin UdpClient просто не должен использоваться?Ошибка?Лучше подход, чем SendAsync?Другое

...