后台工作者的返回类型错误

本文关键字:错误 返回类型 工作者 后台 | 更新日期: 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 TaskBackgroundWorker是怎么工作的

后台工作者的返回类型错误

是否使用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");