C # wszystkie instancje potoku są zajęte

Poniższy kod tworzy nowy wątek działający najpierw jako nazwany klient potoku do wysyłania parametrów, a następnie jako serwer do pobierania wyników. Następnie wykonuje funkcję w innej aplikacji AppDomain, działając jako serwer nazwanych potoków, a następnie jako klient, aby wysłać wyniki z powrotem.

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);
  }
}

Kod jest wywoływany średnio raz na sekundę i działał dobrze przez ponad 7 godzin. Ale w pewnym momencie „system.io.ioexception wszystkie instancje potoków są zajęte” jest rzucane i po tym czasie nie będą się ponownie łączyć. Przeglądanie tutaj wygląda na to, że może to być spowodowane niewłaściwym usuwaniem obiektów rurowych, ale myślę, że to wszystko jest dobre, ponieważ znajdują się one wewnątrz, używając instrukcji. Czy ktoś ma jakieś pojęcie, co może tu być nie tak? Kod znajduje się w .NET 4.0 działającym na serwerze Windows 2008.

questionAnswers(1)

yourAnswerToTheQuestion