Использует ли Func .BeginInvoke ThreadPool?

Когда вы вызываете метод BeginInvoke для делегатов Func (или делегатов Action) в C #, использует ли среда выполнения ThreadPool или порождает новый поток?

Я почти уверен, что он будет использовать ThreadPool как таковой. Было бы логично, но я был бы признателен, если бы кто-то это подтвердил.

Спасибо,

20
задан theburningmonk 24 August 2010 в 12:58
поделиться

2 ответа

Он определенно использует пул потоков.

Я в шоке, если смогу найти это задокументировано, заметьте... эта статья MSDN указывает, что любой обратный вызов, указанный вами, будет выполняться в потоке пула потоков ...

Вот некоторый код, чтобы подтвердить это, но, конечно, это не подтверждает, что это гарантировано произойдет таким образом...

using System;
using System.Threading;

public class Test
{
    static void Main()
    {
        Action x = () => 
            Console.WriteLine(Thread.CurrentThread.IsThreadPoolThread);

        x(); // Synchronous; prints False
        x.BeginInvoke(null, null); // On the thread-pool thread; prints True
        Thread.Sleep(500); // Let the previous call finish
    }
}

EDIT: как указано Джеффом ниже, эта статья MSDN подтверждает это:

Если вызывается метод BeginInvoke, общеязыковая среда выполнения (CLR) ставит запрос в очередь и возвращает немедленно вызывающему абоненту. Цель метод вызывается асинхронно на поток из пула потоков.

29
ответ дан 30 November 2019 в 01:02
поделиться

"Выполняет указанный делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления." - MSDN

Вышеупомянутое относится к элементам управления, но, вероятно, можно предположить, что такая же функциональность применима и к функциям Func. BeginInvoke позволяет вам выполнять Func из другого потока, но не будет создавать для вас потоки. Так что Джон Скит был бы прав. Если вы не создаете потоки для асинхронного выполнения, я бы даже не стал использовать эту функцию, потому что она ничего не купит вам, кроме простого вызова Invoke.

-6
ответ дан 30 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

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