后台工作者的返回类型错误
本文关键字:错误 返回类型 工作者 后台 | 更新日期: 2023-09-27 18:07:13
具有以下代码:
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 DoWork
事件处理程序。它将在DoWork
完成之前触发RunWorkerCompleted
,并且它不会正确捕获异常。
如果你需要在后台线程上做异步工作(这种情况很少见),那么使用Task.Run
代替。我有一个详细的博客系列,但要点是:
await Task.Run(() =>
{
// DoWork code goes here
UserCredential credential;
...
PlayListResponse = request.Execute();
});
// RunWorkerCompleted code goes here
MessageBox.Show("OK");