Нужно ли мне вызывать EndInvoke для делегата, переданного в ThreadPool.QueueUserWorkItem?
Я использую это предложение, чтобы вызовите ThreadPoolQueueWorkItem.
ThreadPool.QueueUserWorkItem(
delegate { someDelegate(arg1, arg2); }
);
Если мне нужно позвонить в endinvoke, как мне это позвонить? Спасибо.
Ответ 1 · рейтинг 4 · Mårten Wikström
Нет, не надо называть это. На самом деле не стоит :-)
Вы должны вызывать EndInvoke только для завершения асинхронного вызова, ранее запущенного путем вызова BeginInvoke.
В предоставленном вами коде вы запускаете делегат синхронно из потока ThreadPool.
Такой подход отлично подходит, когда у вас есть требование "выстрелил и забыл". Однако, если вам нужно получить результат вызова, лучше использовать BeginInvoke, за которым следует EndInvoke.
Ответ 2 · BrandonZeider
В этом нет необходимости, но, согласно MSDN, следует избегать потенциальных утечек памяти. Вот отличное сообщение в блоге Фила Хаака обсуждает проблему, а также его вспомогательный класс для сценариев использования "огонь и забыть".