Diferença entre delegate.BeginInvoke e usando threads ThreadPool em c #

Em C # há alguma diferença entre usar um delegado para fazer algum trabalho de forma assíncrona (chamando BeginInvoke ()) e usando um thread ThreadPool como mostrado abaixo

<code>public void asynchronousWork(object num)
    {
        //asynchronous work to be done
        Console.WriteLine(num);
    }

 public void test()
    {
        Action<object> myCustomDelegate = this.asynchronousWork;
        int x = 7;

        //Using Delegate
        myCustomDelegate.BeginInvoke(7, null, null);

        //Using Threadpool
        ThreadPool.QueueUserWorkItem(new WaitCallback(asynchronousWork), 7);
        Thread.Sleep(2000);
    }
</code>

Editar:
BeginInvoke garante que um thread do pool de threads é usado para executar o código assíncrono, portanto há alguma diferença?

questionAnswers(1)

yourAnswerToTheQuestion