Узел / Express: EADDRINUSE, адрес уже используется - убить сервер

Вы имеете в виду Delegate.Invoke / BeginInvoke или Control.Invoke / BeginInvoke?

  • Delegate.Invoke: выполняется синхронно в том же потоке.
  • Delegate.BeginInvoke: выполняется асинхронно в потоке потоков.
  • Control.Invoke: выполняется в потоке пользовательского интерфейса, но вызывающий поток ожидает завершения, прежде чем продолжить.
  • Control.BeginInvoke: выполняется в потоке пользовательского интерфейса, а вызывающий поток не ожидает завершения.

В ответе Тима упоминается, когда вы, возможно, захотите использовать BeginInvoke - хотя, я подозреваю, он был в основном ориентирован на Delegate.BeginInvoke.

Для приложений Windows Forms я бы посоветовал вам обычно использовать BeginInvoke. Таким образом, вам не нужно беспокоиться о взаимоблокировке, например, - но вы должны понимать, что пользовательский интерфейс, возможно, не был обновлен, когда вы в следующий раз посмотрите на него! В частности, вы не должны изменять данные, которые поток пользовательского интерфейса может использовать для отображения. Например, если у вас есть свойства Person со значениями FirstName и LastName, и вы сделали:

person.FirstName = "Kevin"; // person is a shared reference
person.LastName = "Spacey";
control.BeginInvoke(UpdateName);
person.FirstName = "Keyser";
person.LastName = "Soze";

, тогда пользовательский интерфейс может в конечном итоге отобразить «Keyser Spacey». (Существует внешняя вероятность, что он может отобразить «Кевин Созе», но только из-за странности модели памяти.)

Однако, если у вас нет такой проблемы, Control.BeginInvoke будет проще понять, и будет Избегайте фоновой ветки от необходимости ждать без веской причины. Обратите внимание, что команда Windows Forms гарантировала, что вы можете использовать Control.BeginInvoke в режиме «запускай и забывай», то есть никогда не вызывая EndInvoke. Это не относится к асинхронным вызовам в целом: обычно каждый BeginXXX должен иметь соответствующий вызов EndXXX, обычно в обратном вызове.

369
задан Skawful 1 November 2010 в 20:08
поделиться

1 ответ

ps aux | grep node
kill -9 [PID] (provided by above command)

Описание:


  1. пс даст состояние процесса, aux предоставит список: все процессы пользователя, u: процессы пользователя, x: все другие процессы не прикреплен к терминалу.
  2. символ трубы: | передаст результат ps aux для дальнейшей манипуляции.
  3. grep будет искать предоставленную строку (в нашем случае это узел) из списка, предоставленного ps aux.
7
ответ дан 23 November 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: