Как привести List к Task[]?

Как я могу привести список тасков к массиву? Решил изначально сделать списком, чтобы пользоваться методом Add(), но теперь не могу привести список к массиву

public void Purge(IEnumerable<string> clearList)
{
    List<Task> tasks1 = new List<Task> { };
    
    foreach (string i in clearList)
    {
        Task t = Task.Run(() => deleteAllIn(i));
        tasks1.Add(t);
    }

    Task[] tasks = (Task[])(from i in tasks1 select i);// <--- пробовал так

    Task.WaitAll(tasks);
}

Ответы (3 шт):

Автор решения: Lana

Очень просто как любой IEnumerable к массиву .ToArray()

→ Ссылка
Автор решения: VladD

В качестве альтернативного варианта, имеет смысл не дожидаться списка тасков синхронно — это чревато deadlock-ом (да и блокировать поток для ожидания не стоит). Попробуйте асинхронное ожидание:

public Task PurgeAsync(IEnumerable<string> clearList) =>
    Task.WhenAll(
        clearList.Select(i =>
            Task.Run(() =>
                deleteAllIn(i))));

Не забудьте за-await-ить результат вызова там, где вы его вызываете.

→ Ссылка
Автор решения: 4per

Запускать неизвестное (или вы точно знаете что в коллекции никогда не будет много-много элементов?) количество задач не очень хорошо.

Если у Вас CPU-bound операция, тогда для распределения задачи по ядрам вам поможет Parallel.ForEach

public void Purge(IEnumerable<string> clearList)
{
    Parallel.ForEach(clearList, i => deleteAllIn(i));
}

А если у Вас работа с одним физическим диском, нет никакого смысла её выполнять параллельно. Это даже может снизить производительность. Но очень даже есть смысл выполнять её асинхронно. Но, увы асинхронного удаления файлов нет в .Net. Поэтому просто цикл выполняющийся не в GUI-потоке это оптимальное решение.

→ Ссылка