Variável capturada em um loop em C #

Eu conheci uma questão interessante sobre c #. Eu tenho código como abaixo.

List<Func<int>> actions = new List<Func<int>>();

int variable = 0;
while (variable < 5)
{
    actions.Add(() => variable * 2);
    ++ variable;
}

foreach (var act in actions)
{
    Console.WriteLine(act.Invoke());
}

Espero que ele produza 0, 2, 4, 6, 8. No entanto, ele realmente produz cinco 10s.

Parece que isso se deve a todas as ações referentes a uma variável capturada. Como resultado, quando são chamados, todos têm a mesma saída.

Existe uma maneira de contornar esse limite para que cada instância de ação tenha sua própria variável capturada?

questionAnswers(8)

yourAnswerToTheQuestion