使用任务时不同 returns
Different returns when using task
我有一个带有异步方法的应用程序,它必须 return 一个 List from List ,问题是 return
中发生转换错误
Cannot implicitly convert type 'System.Collections.Generic.List[]' to '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;
}
最奇怪的是,如果我return直接方法,不赋值变量,就不会出现这个错误。如下
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()做别的事情。
问题是,您正在 return 的 links
对象拥有自己的 List<T>
对象。但是 Task.WhenAll
method 需要一个任务列表或一个可枚举的列表,并将 return 每次调用的结果列表。我认为,您根本不必使用 Task.WhenAll(...)
,而是 Task.Run(...)
,因为您只有一个任务。
我有一个带有异步方法的应用程序,它必须 return 一个 List from List ,问题是 return
中发生转换错误Cannot implicitly convert type 'System.Collections.Generic.List[]' to '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;
}
最奇怪的是,如果我return直接方法,不赋值变量,就不会出现这个错误。如下
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()做别的事情。
问题是,您正在 return 的 links
对象拥有自己的 List<T>
对象。但是 Task.WhenAll
method 需要一个任务列表或一个可枚举的列表,并将 return 每次调用的结果列表。我认为,您根本不必使用 Task.WhenAll(...)
,而是 Task.Run(...)
,因为您只有一个任务。