0

异步上传文件的方法:

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();

这是异步上传文件的有效方法吗?

4

2 回答 2

2

好吧,它有几个问题:

  1. async void应该只用于事件处理程序。在所有其他情况下,您应该使用async Task(或async Task<T>),以便您可以异步等待方法完成并正确处理其执行期间发生的任何错误。
  2. 您的方法只是包装了一个同步UploadFile()方法。如果有异步替代方案 ( UploadFileAsync()),那么您应该使用它。
  3. 您可以通过不使用await而是直接返回Task您从StartNew()(或UploadFileAsync())获得的来提高效率。
于 2013-04-20T15:01:39.300 回答
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/

于 2013-04-20T14:18:14.370 回答