Скажімо, я запрограмував додаток, якийпідключається до сервера за допомогою класу розетки (TCP). Якщо під час читання або запису я зіткнувся з винятком SocketException, то, очевидно, мені доведеться запустити програму відключення, щоб змінити стан програми на Відключений.
Але що, якщо я почав відключатися, і поки я прибираю, відбувається виняток SocketException?
Виняток SocketException для мене насправді нічого не означає, оскільки я все одно збирався сам вимкнути сокет .. тож це нормально проковтнути?
Я дійсно хочу знати, яка найкраща практика для цієї ситуації.
Відповіді:
0 для відповіді № 1Я весь час ігнорую винятки з сокетів, як з розетками .net, так і з WCF.
Половину часу, коли я надсилаю дзвінок асинхронно, тому, якщо відбувається розрив зв’язку, я не дізнаюся про це, доки не вийде тайм -аут, тоді я отримую виняток із тайм -аутом, який я ігнорую.
2 для відповіді № 2
Бувають ситуації, коли винятком є"нормальний" випадок. Якщо я добре пам'ятаю, у деяких протоколах (SMTP) клієнти (можуть) відключатись, коли вони будуть готові, не надсилаючи належну команду Close. З боку сервера ви завжди отримуєте виняток, який, як відомо, нешкідливий.
Але переконайтеся, що ви відкидаєте лише певний тип винятку у певному місці.
1 для відповіді № 3
Вам все одно потрібно ковтати, особливо коли ви розробляєте механізм повторної спроби. Правильно? Якщо ви не проковтнули першу помилку, як ви можете ініціалізувати другу спробу?
0 для відповіді № 4
Якщо під час відключення щось піде не так, то в якому стані буде розетка? У найгіршому випадку у віддаленої розетки буде час очікування. Ви дійсно не можете нічого зробити, щоб виправити цю ситуацію.
Але, як сказав Джо Р, зареєструйте повідомлення - ці винятки також можуть виникнути через те, що Disconnect()
вам дзвонять двічі, про що вам хочеться знати. (Змінити: не знаю, чи це викличе виняток, але я сподіваюся, що ви розумієте, що я маю на увазі: P)