Я разрабатываю приложение, которое, кажется, может быть перегружено определенными функциями, которые должны произойти. По сути, в некоторой части приложения преобразование должно происходить на локальном компьютере в сценариях оболочки, что может занять очень много времени, «до 10 минут» для пользовательских объектов. Таким образом, пользователю не придется ждать, чтобы покинуть страницу, потому что ответ от сервера займет много времени, я думал о двух подходах, которые могли бы устранить эту проблему.
Моя идея состоит в том, что я могу создать поток непосредственно перед тем, как это преобразование должно произойти, и заставить этот дочерний поток запускать сценарии оболочки, пока основной поток продолжается, чтобы у пользователя по-прежнему не было экрана загрузки перед ними только мозговой штурм , поэтому не уверен, как этот код будет выглядеть в C # или даст ли он мне идею, которую я на самом деле хочу, потому что я только сделал многопоточность в perl. Процесс запуска функции будет выглядеть примерно так:
public void RunShellScripts(string apppath, string fileargs)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = apppath;
p.StartInfo.Arguments = fileargs;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.RedirectStandardOutput = false;
p.Start();
//after this is done the converted file would be saved in this current directory
//which is the in the value of the fileargs variable
}
Кроме того, чтобы машина, на которой размещен веб-сервер, не пыталась обрабатывать столько процессов одновременно, еще одна идея заключается в том, чтобы сетевой компьютер получал xml rpc от веб-сервер, чтобы сделать преобразование файла. Таким образом, в основном веб-сервер получает объекты, затем отправляет xml rpc на сетевой компьютер для выполнения преобразования и отправляет преобразованный файл обратно на хост-компьютер. Я также знаком с xml-rpc, но не уверен, смогу ли я отправить его обратно. Примечание: файлы могут быть до 1 ГБ. Мой опыт только посылал результаты и только на другом языке, кроме C #.