Я написал веб-интерфейс vibe.d
для clang-format
, когда он представлен this input при использовании стиля LLVM, сервер зависает.Выполнение std.process синхронно с vibe.d иногда молча висит на сервере
Код для обработки POST:
void post(string style, string code)
{
import std.algorithm;
import std.file;
import std.conv;
import std.process;
auto pipes = pipeProcess(["clang-format", "-style="~style], Redirect.stdout | Redirect.stdin);
scope(exit) wait(pipes.pid);
pipes.stdin.write(code);
pipes.stdin.close;
pipes.pid.wait;
code = pipes.stdout.byLine.joiner.to!string;
string selectedStyle = style;
render!("index.dt", styles, code, selectedStyle);
}
Это, вероятно, не должно быть сделано в блокирующем пути, но я в недоумении, как это сделать асинхронно. Я попробовал обернуть содержимое функции в runTask
, но я не мог понять, как правильно ее называть.
Как я могу сделать это надежным?