ファイルのリストをディレクトリにコピーしようとしています。私はasync/awaitを使用しています。しかし、私はこのコンパイルエラーを受け取っています
'await'演算子は、非同期ラムダ式内でのみ使用できます。このラムダ式を '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は誰が私がここで何を欠いているのか指摘できますか?
int processCount = await Task.Run<int>(() =>
する必要があります
int processCount = await Task.Run<int>(async () =>
lambdaはmethodを定義するための省略形であることに注意してください。したがって、外部メソッドはasync
ですが、この場合はラムダ内でawait
を使用しようとしています(これは外部メソッドより異なるメソッドです)。 。したがって、ラムダもasync
とマークする必要があります。