C # todas las instancias de tubería están ocupadas

El siguiente código crea un nuevo hilo que actúa primero como un cliente de canalización con nombre para enviar parámetros y luego como un servidor para recuperar resultados. Después de eso, ejecuta una función en otro dominio de aplicación que actúa como un servidor de canalización con nombre y, posteriormente, como cliente para enviar los resultados.

public OrderPrice DoAction()
{
  Task<OrderPrice> t = Task<OrderPrice>.Factory.StartNew(NamedPipeClient, parameters);

  if (domain == null)
  {
    domain = AppDomain.CreateDomain(DOMAINNAME);
  }
  domain.DoCallBack(AppDomainCallback);

  return t.Result;
}

static OrderPrice NamedPipeClient(object parameters) {
  OrderPrice price = null;

  using (NamedPipeClientStream stream = new NamedPipeClientStream(PIPE_TO)) {
    stream.Connect();
    SerializeToStream(stream, parameters);
  }

  using (NamedPipeServerStream stream = new NamedPipeServerStream(PIPE_BACK)) {
    stream.WaitForConnection();

    price = (OrderPrice)DeserializeFromStream(stream);
  }

  return price;
}

void AppDomainCallback() {
  OrderPrice price = null;

  using (NamedPipeServerStream stream = new NamedPipeServerStream(PIPE_TO)) {
    stream.WaitForConnection();

    List<object> parameters = (List<object>)DeserializeFromStream(stream);

    if (mi != null)
      price = (OrderPrice)mi.Invoke(action, parameters.ToArray());
}

  using (NamedPipeClientStream stream = new NamedPipeClientStream(PIPE_BACK)) {
    stream.Connect();
    SerializeToStream(stream, price);
  }
}

El código se llama una vez por segundo en promedio y funcionó bien durante más de 7 horas. Pero en algún momento se lanza "system.io.ioexception, todas las instancias de tubería están ocupadas" y no se volverán a conectar después de eso. Al buscar aquí, parece que podría ser debido a que no se eliminan correctamente los objetos de la tubería, pero supongo que eso es bueno, ya que están dentro utilizando declaraciones. ¿Alguien tiene alguna idea de lo que podría estar mal aquí? El código está en .NET 4.0 ejecutándose en Windows Server 2008.

Respuestas a la pregunta(1)

Su respuesta a la pregunta