отменить операцию блокировки в Go

У меня есть блокировка в сторонней библиотеке, которую я не контролирую. Это может потенциально уйти навсегда. Поэтому я хочу установить таймаут на нем. Очевидным способом является обернуть его каналом и goroutine, а затем выбрать результат с time.After . Тем не менее, проблема в том, что goroutine, выполняющий операцию блокировки, может потенциально уйти навсегда.

Вот пример, чтобы проиллюстрировать это http://repl.it/90o

Есть ли способ отменить goroutine или собрать мусор?

Вы не можете остановить горутин из «снаружи». Горотин должен поддерживать некоторую сигнализацию о завершении (чаще всего канал). Но если это не так, вы не можете заставить его или убить его.

Если вы ничего не можете сделать о том, что вы используете, вы можете использовать его в другом процессе (в другом приложении, запущенном вашим приложением), которое вы можете убить, но это просто уродливый и слишком громоздкий.

Я не думаю, что ты можешь что-то сделать. В Go вы не можете остановить горутин снаружи. Если вы не можете исправить эту библиотеку, и вы думаете, что она может блокироваться навсегда, тогда напишите новую, которую вы сможете контролировать.

Interesting Posts

Spring – @Transactional – Что происходит в фоновом режиме?

Как обрабатывать запросы HTTP OPTIONS в Spring Boot?

Можно ли запускать несколько виртуальных машин с независимой клавиатурой мыши + на одном ПК?

Как я могу допустить, что rbind () не станет очень медленным, поскольку размер фреймворка увеличивается?

Как использовать мою собственную базу данных sqlite?

Как удалить дубликаты на основе ключа в Mongodb?

Почему невозможно расширять annotations в Java?

Лучший / самый быстрый способ чтения листа Excel в DataTable?

Живая аудиозапись и воспроизведение в Android и обработка обратного вызова и обратного вызова

Как настроить кнопку Добавить в jqGrid?

Установите Windows 7 на второй жесткий диск после Ubuntu 12.04 … с UEFI

что такое идентификаторы формата scanf (“% * s”) и scanf (“% * d”)?

Браузеры перенаправляются на level3.com, если домен не существует

Используете ли вы типы enums в своих веб-службах WCF?

Как кодировать перечисление с помощью NSCoder в swift?

Давайте будем гением компьютера.