我有下面的任务,想要得到Servico.ExportarProdutosPorArquivo(parametros)
的结果并在完成线程后使用它。这样做了吗?
private void RealizarSolicitacao(ParametrosExportacaoProdutos parametros, FilialDaConfiguracao filial)
{
ResultadoExportacaoProdutos resultado;
Task task1 = Task.Factory.StartNew(() => resultado = Servico.ExportarProdutosPorArquivo(parametros));
}
答案 0 :(得分:2)
有几种方法可以做到:
async
/ await
(如果您使用C#5)。您必须将方法返回类型更改为async Task
,然后使用await task1;
等待任务结果。这不会阻止当前线程。task1.Wait()
阻止,直到任务完成。task1.ContinueWith
计划在任务完成后将执行的延续我还建议您将任务更改为Task<ResultadoExportacaoProdutos>
,即var task1 = Task.Factory.StartNew(() => Servico.ExportarProdutosPorArquivo(parametros));
。它更干净,因为任务不会写入方法范围的变量。
async
/ await
版本将成为
private async Task RealizarSolicitacao(ParametrosExportacaoProdutos parametros, FilialDaConfiguracao filial)
{
var resultado = await Task.Run(() => Servico.ExportarProdutosPorArquivo(parametros));
// do something with resultado
}
阻止Wait
/ Result
版本将是:
private void RealizarSolicitacao(ParametrosExportacaoProdutos parametros, FilialDaConfiguracao filial)
{
var task1 = Task.Run(() => Servico.ExportarProdutosPorArquivo(parametros));
var resultado = task1.Result;
// do something with resultado
}
答案 1 :(得分:1)
添加
await task1;
然后评估resultado。
if(resultado!=null)...
答案 2 :(得分:1)
看看MSDN Link。以你的例子:
private void RealizarSolicitacao(ParametrosExportacaoProdutos parametros, FilialDaConfiguracao filial)
{
Task<ResultadoExportacaoProdutos> task1 = Task<ResultadoExportacaoProdutos>.Factory.StartNew(() =>
{
return Servico.ExportarProdutosPorArquivo(parametros);
});
//The Result property blocks the calling thread until the task finishes.
ResultadoExportacaoProdutos resultado = task1.Result;
}