任务结束后的处理结果
本文关键字:处理 结果 结束 任务 | 更新日期: 2023-09-27 18:24:00
我有下面的Task,希望获得Servico.ExportarProdutosPorArquivo(parametros)
的结果,并在线程完成后使用它。它在做这个?
private void RealizarSolicitacao(ParametrosExportacaoProdutos parametros, FilialDaConfiguracao filial)
{
ResultadoExportacaoProdutos resultado;
Task task1 = Task.Factory.StartNew(() => resultado = Servico.ExportarProdutosPorArquivo(parametros));
}
有几种方法可以做到这一点:
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
}
添加
await task1;
然后评估结果。
if(resultado!=null)...
查看MSDN链接。例如:
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;
}