【发布时间】:2018-09-21 12:47:14
【问题描述】:
我有一个内部带有异步调用的 lambda 表达式
public async Task UploadFile(string id)
{
Progress<double> progress = new Progress<double>(async x =>
{
await Clients.Client(id).SendAsync("FTPUploadProgress", x);
});
await client.DownloadFileAsync(localPath, remotePath, true, FluentFTP.FtpVerify.Retry, progress);
}
我想在进度改变时调用 async 方法。
我收到以下警告:
此异步方法缺少“等待”运算符,将同步运行。 考虑使用 'await' 运算符来等待非阻塞 API 调用
我怎样才能使这个方法异步?
我应该用 System.Action<T> 类重写 lambda 吗?
【问题讨论】:
-
UploadFile被标记为async但其中没有一个await -
为什么在进度委托中有
SendAsync调用?你应该把它移到外部方法中。那么如果你想使用进度,你应该将它传递给一个接受Progress参数的方法,并在lambda表达式中实现进度逻辑。 -
我本来希望将 IProgress 参数传递给 SendAsync ... 就像您将 CancellationToken 一样。
-
“我想在进度改变时调用该方法” 您应该将此添加到您的问题中。这是一个完全不同的游戏。
-
@myro 因为警告中没有
await运算符。async方法需要有一个await运算符,否则它不是异步的。您在进度委托中拥有的那个不属于它。
标签: c# asp.net-core