Fiz o código a seguir em uma aplicação windows forms, mas a interface continuar travada:
private void btnExecutar_Click(object sender, EventArgs e)
{
var taskSchedulerUI = TaskScheduler.FromCurrentSynchronizationContext();
btnExecutar.Enabled = false;
List<String> lista = preencheLista();
var teste = lista.Select(x =>
{
return Task.Factory.StartNew(() =>
{
exibirLista(x);
});
}).ToArray();
Task.WhenAll(teste)
.ContinueWith(task =>
{
btnExecutar.Enabled = true;
}, taskSchedulerUI);
}
private void exibirLista(String x)
{
Console.WriteLine(x);
}
private List<String> preencheLista()
{
List<String> lista = new List<String>();
for (int i = 0; i < 1000000; i++)
{
lista.Add(i.ToString());
}
return lista;
}