/// <summary> /// Метод, рассылающий запросы серверу для получения следующих членов последовательностей /// </summary> /// <param name="token"></param> private void Query(CancellationToken token) { int i = 1; while (!token.IsCancellationRequested) { FibonacciSequence current = _sequences[keys[i]]; lock (current) { if (!current.Waiting) { try { SendQuery(current.Current, keys[i]); current.Waiting = true; } catch (System.Exception e) { } } } i++; if (i >= _sequences.Count) { i = 0; } } }
/// <summary> /// Конструктор /// </summary> /// <param name="SequenceAmount">Количество одновременно расчитываемых последовательностей</param> /// <param name="webAPIString">Адрес хоста web-службы</param> /// <param name="rabbitService">Адрес RabbitMQ службы</param> public FibonacciPool(int SequenceAmount, string webAPIString, string rabbitService) { _webApiLink = webAPIString; _rabbitServiceURL = rabbitService; // Подписываемся на rabbitMQ _bus = RabbitHutch.CreateBus(_rabbitServiceURL); _bus.Subscribe <Tuple <string, int> >(Guid.NewGuid().ToString(), OnResponse); // Создаём словарь последовательностей for (int i = 0; i < SequenceAmount; i++) { string currentGuid = Guid.NewGuid().ToString(); _sequences[currentGuid] = new FibonacciSequence(); keys.Add(currentGuid); } QueryTask = new Task(() => Query(cancellationToken.Token)); }