使用任务时返回不同

时间:2018-04-02 18:24:32

标签: c# task-parallel-library

我有一个带有异步方法的应用程序,必须从List返回List,问题是返回时发生转换错误

  

无法将类型'System.Collections.Generic.List []'隐式转换为'System.Collections.Generic.List'

代码就像这样

private async Task<List<IWebElement>> Acessar(IWebDriver driver, string data)
    {

        var acessar = Task.Factory.StartNew(() =>
        {
            LoginNgin.Login(config.User, config.Password, driver);

            RelatoriosEstaticos.AbrirRelatoriosEstaticos(driver);

            RelatoriosEstaticos.AbrirDataAtual(driver, data);

            var links = ListArquivos.ListaLinksDownlaod(driver);

            m_ProgressBar.Invoke(new AtualizarProgressCallBack(AtualizarProgress),
            new object[] {links.Count()});

            return links;
        });

        return await Task.WhenAll(acessar) //Error here;

    }

最奇怪的是,如果我返回直接方法,而不指定变量,则不会发生错误。如下

        private async Task<List<IWebElement>> AcessarNgin(IWebDriver driver, string data)
    {

        var acessar = Task.Factory.StartNew(() =>
        {
            LoginNgin.Login(config.User, config.Password, driver);

            RelatoriosEstaticos.AbrirRelatoriosEstaticos(driver);

            RelatoriosEstaticos.AbrirDataAtual(driver, data);

            return ListArquivos.ListaLinksDownlaod(driver);

            m_ProgressBar.Invoke(new AtualizarProgressCallBack(AtualizarProgress),
            new object[] {links.Count()});

        });

        return await Task.WhenAll(acessar);

    }

只有我不能这样做,因为我需要给.Count()做其他事情。

1 个答案:

答案 0 :(得分:0)

问题是,您要返回的links对象拥有自己的List<T>对象。但是Task.WhenAll method需要一个任务列表或一个可枚举的,并将返回每个调用的结果列表。我认为,您根本不必使用Task.WhenAll(...),而是使用Task.Run(...),因为您只有一个任务。