将异步上传文件的方法:
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();
这是一种异步上传文件的有效方法吗?
答案 0 :(得分:2)
嗯,它有几个问题:
async void
应仅用于事件处理程序。在所有其他情况下,您应该使用async Task
(或async Task<T>
),以便您可以异步等待,直到方法完成并正确处理执行期间发生的任何错误。UploadFile()
方法。如果存在异步替代(UploadFileAsync()
),那么您应该使用它。await
来提高效率,而是直接返回Task
(或StartNew()
)获得的UploadFileAsync()
。答案 1 :(得分:1)
是的但是为什么要等待方法
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 /