на основе кода, который вы поделились здесь вы начинаете процесс. Это касается, поскольку вы на самом деле не ожидаете результата процесса, на самом деле - это огонь и забудьте независимо от async
и await
ключевых слов, если вы не дождались завершения процесса. Есть несколько способов сделать это:
public static Task WaitForExitAsync(this Process process,
int milliseconds,
CancellationToken cancellationToken = default(CancellationToken))
{
return Task.Run(() => process.WaitForExit(milliseconds), cancellationToken);
}
Например, вот метод расширения вы можете использовать, чтобы обернуть ожидания для процесса в Task
. Это может быть затем ждали, как это:
public async Task PrintOrderAsync(string PrintExe, string ExePath, int nOrderNo)
{
return Process.Start(ExePath + PrintExe, nOrderNo.ToString())
.WaitForExitAsync(5000);
}
// Then you could await it wherever...
await PrintOrderAsync(PrintExe, ExePath, nOrderNo);
В качестве альтернативы, если вы не хотите ждать его завершения (то есть, вы хотите огонь и забыть, как у вас сейчас) это сделать:
Process.Start(ExePath + PrintExe, nOrderNo.ToString())
Не заверните его в Task
или что-нибудь еще, это совершенно отдельный процесс в любом случае (лично я предпочитаю первый вариант, который я поделил).
Почему вы решили использовать 'StartNew'? Вы видели это где-то в качестве примера? –
@ StephenCleary Да, я видел это где-то. Но я слушаю, и если вы думаете, что код должен работать лучше с изменениями, пожалуйста, дайте мне знать. – Hidalgo
@StephenCleary Теперь, когда вы задали вопрос, я пытаюсь понять, как я могу изменить/оптимизировать линию с помощью StartNew и не могу понять это. Очевидно, что вы видите что-то не так с моим синтаксисом, поэтому мне нужно узнать, как заставить его работать лучше. – Hidalgo