【问题标题】:Why i'm getting error Cannot await 'void'?为什么我收到错误不能等待'void'?
【发布时间】:2016-12-31 13:23:18
【问题描述】:
private Queue<string> _downloadUrls = new Queue<string>();

        private void downloadFile(IEnumerable<string> urls)
        {
            foreach (var url in urls)
            {
                _downloadUrls.Enqueue(url);
            }

            DownloadFile();
        }

        private async Task DownloadFile()
        {
            if (_downloadUrls.Any())
            {
                WebClient client = new WebClient();
                client.DownloadProgressChanged += ProgressChanged;
                client.DownloadFileCompleted += Completed;

                var url = _downloadUrls.Dequeue();
                string FileName = url.Substring(url.LastIndexOf("/") + 1,
                            (url.Length - url.LastIndexOf("/") - 1));

                await client.DownloadFileAsync(new Uri(url), "C:\\Test4\\" + FileName);
                return;
            }
        }

错误就行了:

await client.DownloadFileAsync(new Uri(url), "C:\\Test4\\" + FileName);

我该如何解决这个错误? 为什么会发生? 我给出了我认为的所有细节。

我添加了可能需要的其余代码。

【问题讨论】:

  • 我编辑了我的问题添加了其余的代码。将其更改为异步任务,但仍然出现相同的错误。

标签: c# .net winforms


【解决方案1】:

WebClient.DownloadFileAsync 是一个基于事件的 API,它早于 Tasks 和 async/await。您需要等待 WebClient.DownloadFileTaskAsync

【讨论】:

    【解决方案2】:

    await 运算符以异步方法应用于任务,这意味着您可以在返回任务的方法上等待。

    WebClient.DownloadFileAsync 确实返回任务,但 WebClient.DownloadFileTaskAsync 确实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      相关资源
      最近更新 更多