Bezdepbonusu7Программирование: статьи и ответы

Вопрос

ThreadPool.QueueUserWorkItem и EndInvoke

Автор вопроса: kevindaubОтветов: 2

Нужно ли мне вызывать EndInvoke для делегата, переданного в ThreadPool.QueueUserWorkItem?

Я использую это предложение, чтобы вызовите ThreadPoolQueueWorkItem.

ThreadPool.QueueUserWorkItem(
    delegate { someDelegate(arg1, arg2); }
);

Если мне нужно позвонить в endinvoke, как мне это позвонить? Спасибо.

threadpool

Ответы

Ответ 1 · рейтинг 4 · Mårten Wikström

Нет, не надо называть это. На самом деле не стоит :-)

Вы должны вызывать EndInvoke только для завершения асинхронного вызова, ранее запущенного путем вызова BeginInvoke.

В предоставленном вами коде вы запускаете делегат синхронно из потока ThreadPool.

Такой подход отлично подходит, когда у вас есть требование "выстрелил и забыл". Однако, если вам нужно получить результат вызова, лучше использовать BeginInvoke, за которым следует EndInvoke.

Ответ 2 · BrandonZeider

В этом нет необходимости, но, согласно MSDN, следует избегать потенциальных утечек памяти. Вот отличное сообщение в блоге Фила Хаака обсуждает проблему, а также его вспомогательный класс для сценариев использования "огонь и забыть".

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы