Подтвердить что ты не робот

Оператор "ожидание" может использоваться только с выражением асинхронного лямбда

Я пытаюсь скопировать список файлов в каталог. Я использую async/wait. Но я получаю эту ошибку компиляции

Оператор "ожидание" может использоваться только в асинхронной лямбда выражение. Рассмотрите маркировку этого лямбда-выражения с помощью "async" Модификатор.

Вот как выглядит мой код

async Task<int> CopyFilesToFolder(List<string> fileList, 
            IProgress<int> progress, CancellationToken ct)
{
    int totalCount = fileList.Count;
    int processCount = await Task.Run<int>(() =>
    {
        int tempCount = 0;
        foreach (var file in fileList)
        {
            string outputFile = Path.Combine(outputPath, file);

            await CopyFileAsync(file, outputFile); //<-- ERROR: Compilation Error 

            ct.ThrowIfCancellationRequested();
            tempCount++;
            if (progress != null)
            {
                progress.Report((tempCount * 100 / totalCount)));
            }

        }

        return tempCount;
    });
    return processCount;
}


private async Task CopyFileAsync(string sourcePath, string destinationPath)
{
    using (Stream source = File.Open(sourcePath, FileMode.Open))
    {
        using (Stream destination = File.Create(destinationPath))
        {
            await source.CopyToAsync(destination);
        }
    }

}

Pls может кто-нибудь указать, что мне здесь не хватает?

4b9b3361

Ответ 1

int processCount = await Task.Run<int>(() =>

Должно быть

int processCount = await Task.Run<int>(async () =>

Помните, что лямбда является просто сокращением для определения метода. Таким образом, ваш внешний метод async, но в этом случае вы пытаетесь использовать await внутри лямбда (это другой метод, чем ваш внешний метод). Поэтому ваша лямбда должна быть отмечена async.