我有一个带有异步方法的应用程序,必须从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()做其他事情。
答案 0 :(得分:0)
问题是,您要返回的links
对象拥有自己的List<T>
对象。但是Task.WhenAll
method需要一个任务列表或一个可枚举的,并将返回每个调用的结果列表。我认为,您根本不必使用Task.WhenAll(...)
,而是使用Task.Run(...)
,因为您只有一个任务。