';等待';运算符只能与异步lambda表达式一起使用
本文关键字:表达式 一起 lambda 等待 运算符 异步 | 更新日期: 2023-09-27 18:21:19
我正在尝试将文件列表复制到一个目录中。我正在使用async/await。但我收到了这个编译错误
"await"运算符只能在异步lambda中使用表示请考虑使用"async"标记此lambda表达式修饰符。
这就是我的代码看起来像
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);
}
}
}
有人能指出我这里缺了什么吗?
int processCount = await Task.Run<int>(() =>
应该是
int processCount = await Task.Run<int>(async () =>
请记住,lambda只是定义方法的简写。因此,您的外部方法是async
,但在本例中,您试图在lambda中使用await
(这是一个与外部方法不同的方法)。所以你的lambda也必须标记为async
。