private async void Loop() { Status = ExecutorStatus.Running; while (await queue.OutputAvailableAsync()) { InputParameters tmp = queue.Receive(); semaphore.WaitOne(); Action taskingOperation = () => { if (tmp.CallBack != null) { string id = Guid.NewGuid().ToString(); var path = ArgumentsToFiles(tmp.Parameters, tmp.ScriptSource, id); try { OperationRun(path); string[] result = FilesToOutputs(path); tmp.CallBack(result); } catch (Exception ex) { Console.Error.WriteLine(ex.Message); tmp.CallBack(null); } Directory.Delete(path, true); } semaphore.Release(); }; #pragma warning disable CS4014 // Так как этот вызов не ожидается, выполнение существующего метода продолжается до завершения вызова Task.Run(taskingOperation); #pragma warning restore CS4014 // Так как этот вызов не ожидается, выполнение существующего метода продолжается до завершения вызова } }