Я нахожусь в ситуации, когда мне нужно вызвать exe-процесс через конечную точку API (запустить и забыть).Тем не менее, exe-файл, который я назову, является долгосрочным, но мне нужно дождаться его завершения, чтобы выполнить дальнейшие коды.Это произойдет в фоновом режиме, и клиент не должен ждать этого.Когда я пытаюсь код ниже, вызов ждет завершения exe-процесса.Я также попытался сделать метод "асинхронным", но все еще тот же результат.
[HttpPost]
public async Task<bool> ToggleCarWeaverService(string command)
{
try
{
var fileName = @"SomeExe.exe";
await _service.RunProcessAsync(command, fileName);
return true;
}
catch (Exception ex)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
}
public Task<int> RunProcessAsync(string command, string fileName)
{
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo
{
CreateNoWindow = false,
UseShellExecute = true,
FileName = fileName,
WindowStyle = ProcessWindowStyle.Normal,
Arguments = command
};
try
{
var tcs = new TaskCompletionSource<int>();
var process = new Process
{
StartInfo = startInfo,
EnableRaisingEvents = true
};
process.Exited += (sender, args) =>
{
tcs.SetResult(process.ExitCode);
//Do more code
process.Dispose();
};
process.Start();
return tcs.Task;
}
catch (Exception ex)
{
// Log error.
throw ex;
}
}