Pipe is broken с#

Я сделал сервер копирования,который по запросу клиента копирует файл в папке проекта по имени.Когда я делал все в одном файле,то программа работала.Когда я решил разделить файлы и сделать в клиенте процесс,который запускает сервер,то у меня вылетела ошибка Pipe is broken в строке writer.Flush(); клиента.С чем это связано?

Программа для клиента:

using System.Diagnostics;
using System.IO;
using System.IO.Pipes;
using System.Net;
using System.Text;

class Task4 {


    static void Main(string[] args)
    {

        Process process=Process.Start("C:\\Users\\Максим\\source\\repos\\Os_Lab4\\Task4(1)\\bin\\Debug\\net6.0\\Task4(1).exe");
       
        Thread.Sleep(100);
        //Client
        var client = new NamedPipeClientStream("PipesOfPiece");
        client.Connect();

        Console.WriteLine("Client connected");
        StreamReader reader = new StreamReader(client);
        StreamWriter writer = new StreamWriter(client);

        while (true)
        {
           
            Console.WriteLine("Enter name of file and name of destination file");
            string input = Console.ReadLine();
            if (String.IsNullOrEmpty(input)) break;
            writer.WriteLine(input);
            writer.Flush();
            Console.WriteLine(reader.ReadLine());
           
        }
    }
}

Программа для сервера:

using System.IO.Pipes;
class Server
{
    static void  StartServer()
    {
        Task.Factory.StartNew(() =>
        {
           
            var server = new NamedPipeServerStream("PipesOfPiece");
            server.WaitForConnection();

            Console.WriteLine("Client connected to server");

            StreamReader reader = new StreamReader(server);
            StreamWriter writer = new StreamWriter(server);
            while (true)
            {
             
                var line = reader.ReadLine();
                Console.WriteLine("Server's response: ");
                writer.WriteLine(line);
                writer.Flush();
                Console.WriteLine(reader.ReadLine());
                if (line != null) CopyFileonServer(line.Split()[0], line.Split()[1]);
               
            }
        });
    }
    static void CopyFileonServer(string name, string name1)
    {
        string path = "C:\\Users\\Максим\\source\\repos\\Os_Lab4\\Task4\\";
        string path1 = path + name1;
        path += name;
        File.Copy(path, path1);
        /*
        Thread newThread = new Thread(CopyServer(name ,name1));
        newThread.Name = String.Format("Thread{0}", 1);
        newThread.Start();
       */

    }

    static void Main(string[] args)
    {
        Console.WriteLine("Сервер запущен");
        StartServer();
      
    }
}

Ответы (1 шт):

Автор решения: aepot

Уберите Task.Factory.StartNew, оставьте код просто в методе StartServer. У вас Main завершается сразу же и сервер выключается.

На будущее, вместо Task.Factory.StartNew используйте Task.Run. Еще почитайте что-нибудь про IDisposable, Path.Combine и буквальные строковые литералы @"text".

→ Ссылка