【发布时间】:2015-08-10 12:26:54
【问题描述】:
有以下代码:
private async Task backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync (
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.Youtube },
"user",
CancellationToken.None,
new FileDataStore(this.GetType().ToString())
);
}
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = this.GetType().ToString()
});
PlaylistsResource.ListRequest request = youtubeService.Playlists.List("snippet");
request.Mine = true;
PlayListResponse = request.Execute();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("OK");
}
当我构建解决方案时,我得到:
'System.Threading.Tasks.Task YouTubeDesktopPlayer.Form1.backgroundWorker1_DoWork(object, System.ComponentModel.DoWorkEventArgs)' has the wrong return type
如何更改返回类型?我有点困惑,我不明白async Task 和BackgroundWorker 是如何工作的
【问题讨论】:
-
你需要它是
async void才能与 DoWorkEventHandler 兼容。 -
就是这样。它正在工作。
-
如果您已经使用异步方法,那么使用 BackgroundWorker 就没有什么意义了。您可以在开始下载的事件(例如按钮单击)中简单地使用
async void语法。事实上,对于async/await和 TPL,一般来说使用 BackgroundWorker 没有什么意义
标签: c# async-await task backgroundworker