这是async/await的正确实现吗?
本文关键字:实现 async await 这是 | 更新日期: 2023-09-27 18:10:12
异步上传文件的方法:
public async void UploadScreenshot(DateTime? date = null)
{
var uploadTask = Task.Factory.StartNew(() => _ftp.UploadFile(_screenshotLocalFile,
date.HasValue
? _screenshotRemoteFile.Replace("{1}", date.Value.ToString(Helper.StandardTimeFile))
: _screenshotRemoteFile.Replace("{1}", DateTime.Now.ToString(Helper.StandardTimeFile))));
await uploadTask;
}
用法:
UploadScreenshot();
这是一个有效的方法来上传文件异步?
它有几个问题:
-
async void
应仅用于事件处理程序。在所有其他情况下,您应该使用async Task
(或async Task<T>
),以便您可以异步等待,直到方法完成,并正确处理在执行过程中发生的任何错误。你的方法只是包装了一个同步的UploadFile()
方法。如果有一个异步的选择(UploadFileAsync()
),那么你应该使用它。 - 您可以通过不使用
await
而直接返回从StartNew()
(或UploadFileAsync()
)获得的Task
来提高效率。
可以,但是为什么要在方法
中使用await呢?public Task UploadScreenshot(DateTime? Date = null)
{
var uploadTask = Task.Factory.StartNew(() =>
_ftp.UploadFile(_screenshotLocalFile, date.HasValue
? _screenshotRemoteFile.Replace("{1}", date.Value.ToString(Helper.StandardTimeFile))
: _screenshotRemoteFile.Replace("{1}", DateTime.Now.ToString(Helper.StandardTimeFile))));
return uploadTask;
}
用法:
await UploadScreenshot();
也正如我所知道的异步方法返回void不是好的做法,最好返回Task/