Como obter valor de retorno quando BeginInvoke / Invoke é chamado em C #

Eu tenho esse pequeno método que deveria ser seguro para threads. Tudo funciona até que eu queira que tenha valor de retorno em vez de nulo. Como obtenho o valor de retorno quando BeginInvoke é chamado?

public static string readControlText(Control varControl) {
        if (varControl.InvokeRequired) {
            varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
        } else {
            string varText = varControl.Text;
             return varText;
        }

    }

Edit: Eu acho que ter BeginInvoke não é necessário, neste caso, como eu preciso de valor da GUI antes que o segmento possa continuar. Portanto, usar Invoke também é bom. Apenas nenhuma pista de como usá-lo no exemplo a seguir para retornar valor.

private delegate string ControlTextRead(Control varControl);
    public static string readControlText(Control varControl) {
        if (varControl.InvokeRequired) {
            varControl.Invoke(new ControlTextRead(readControlText), new object[] {varControl});
        } else {
            string varText = varControl.Text;
             return varText;
        }

    }

Mas não sei como obter valor usando esse código também;)

questionAnswers(6)

yourAnswerToTheQuestion