#c# #ios #xamarin.ios
#c# #iOS #xamarin.ios
Вопрос:
BeginSend
функция не выдает исключение, когда я отключаю iPad от сети. Интересно то, что OnSend
функция обратного вызова вызывает и результат. Iscompleted
возвращает true.
Если я вызываю другую перегруженную функцию с кодом ошибки, она всегда возвращает success
tcpAsyCl.BeginSend(
write_data,
0,
write_data.Length,
SocketFlags.None,
out error,
new AsyncCallback(OnSend),
null);
if (error != SocketError.Success)
throw new Exception("Not connected"); //never goes her
Кто-нибудь знает такое поведение?
Ответ №1:
поскольку это асинхронный вызов! Вы не можете проверить результат в строке ниже… Я уверен, что у вас есть метод, который вы можете подключить, чтобы получить правильную ошибку.
Асинхронные вызовы создаются в новом потоке, и именно там вам нужно дождаться ответа. Не в вашем основном потоке, иначе это был бы Синхронный вызов.
вот список всех методов, которые вы можете использовать
Я бы настоятельно рекомендовал вам внимательно ознакомиться с этим документом
Комментарии:
1. Когда я использую эту форму, она никогда не выдает исключение. tcpAsyCl.BeginSend(write_data, 0, write_data. Длина, SocketFlags. Нет, новый обратный вызов AsyncCallback (OnSend), null); Но в Windows он выдает исключение, когда netwrok недоступен. В iOS я не могу исправить статус disconnected.
2. все ваши ошибки будут в
OnSend
обратном вызове, поскольку именно там вы указываете методу Async возвращать информацию, вы можете использовать делегат вместо метода. Смотрите ссылку на обновленный ответ.3. Добавьте связанный документ со всем кодом и объяснениями, которые вам нужны для использования
System.Net.Sockets
в асинхронном вызове4. Я пробовал эти методы, но мне это не помогло. Когда я отключаю устройство от сети, оно продолжает отправлять данные в клиент OnSend. EndSend (результат) возвращает 14 байт за время отключения.