Ответ 1
Он использует пул потоков, определенно.
Меня взорвут, если я смогу найти это документально, неважно, эта статья 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
}
}
РЕДАКТИРОВАТЬ: Как указано Джеффом ниже, эта статья MSDN подтверждает это:
Если вызывается метод BeginInvoke, общая среда выполнения CLR (CLR) очереди запроса и возвращает немедленно вызывающему абоненту. Цель метод называется асинхронно на поток из пула потоков.