понедельник, 14 мая 2018 г.

Waitforexit assíncrono


Waitforexit async
Eu estou usando a solução fornecida em: stackoverflow / a / 19104345/2713516 para executar WaitForExit async, no entanto, eu quero usar a sobrecarga de parâmetro Int32 (msdn. microsoft/en-us/library/ty0d8k56(v=vs.110). aspx), como em process. WaitForExit (10000).
Como eu altero este método de extensão para que ele funcione com o parâmetro timeout?
Pergunta secundária: Eu também vi alguém mencionar (stackoverflow / a / 32994778/2713516) que eu deveria descartar o cancelamentoTokenToken em algum momento, não deveria usar um descarte / uso dentro do método então? e como?

Waitforexit async
Eu quero esperar por um processo para concluir, mas process. WaitForExit () trava minha GUI. Existe uma maneira baseada em eventos, ou eu preciso gerar um thread para bloquear até sair e delegar o evento eu mesmo?
A partir do. NET 4.0 / C # 5, é melhor representá-lo usando o padrão assíncrono.
Se você escolher a resposta @MgSam, esteja ciente, se você passar por WaitForExitAsync algum CancellationToken, que será automaticamente cancelado após o atraso especificado, você poderá obter uma InvalidOperationException. Para corrigir isso, você precisa mudar.

Aguarde Extensões. Espere pela saída assíncrona (processo, CancellationToken) espere extensões. Aguarde o método Exit Async (Process, CancellationToken).
Definição.
Neste artigo.
Retorna uma tarefa que é concluída quando o processo sai e fornece o código de saída desse processo.
O processo para esperar pela saída.
Um token cujo cancelamento fará com que a Tarefa retornada seja concluída antes que o processo saia em um estado com falha com uma OperationCanceledException. Este token não tem efeito no processo em si.
Uma tarefa cujo resultado é o ExitCode do processo.

Waitforexit async
Pareceu-me que este sistema de assincronia era uma solução gloriosa para um problema que tenho tido onde preciso iniciar um processo externo e depois esperar que ele seja concluído. Atualmente, tenho o seguinte código no thread da interface do usuário:
Process process = new Process ();
O processo muitas vezes leva vários segundos, mas eu resisti a usar um trabalhador de segundo plano ou similar, porque isso simplesmente não acontece o suficiente para valer o esforço e a manipulação de códigos.
Vi menção de métodos de extensão no informe oficial, mas parece não haver nenhum método de extensão para process. RunAsync () ou algo semelhante, deixando & quot; Wait TaskEx. Run (() = & gt; process. WaitForExit ()); & quot; como a única solução que parece que vai funcionar. Girar um tópico extra só para chamar WaitForExit parece um pouco estúpido.
Também não encontrei nenhum método estático que parecesse promissor em qualquer um dos AsyncCtpExtensions, AsyncCtpThreadingExtensions, TaskEx ou TaskExtensions.
Existe uma maneira melhor (planejada) de aguardar a conclusão do processo externo?

Waitforexit async
Eu quero esperar por um processo para concluir, mas process. WaitForExit () trava minha GUI. Existe uma maneira baseada em eventos, ou eu preciso gerar um thread para bloquear até sair e delegar o evento eu mesmo?
A partir do. NET 4.0 / C # 5, é melhor representá-lo usando o padrão assíncrono.
Se você escolher a resposta @MgSam, esteja ciente, se você passar por WaitForExitAsync algum CancellationToken, que será automaticamente cancelado após o atraso especificado, você poderá obter uma InvalidOperationException. Para corrigir isso, você precisa mudar.

Комментариев нет:

Отправить комментарий