示例#1
0
        public override async Task Subscribe(IAsyncStreamReader <MatematicaRequest> request, IServerStreamWriter <MatematicaResponse> response, ServerCallContext context)
        {
            using var subscriberF = _factoryMethod.GetFibonacciSubscriber();

            subscriberF.FibonacciEvent += async(sender, args) =>
                                          await WriteUpdateAsyncFib(response, args.FibonacciResult);

            subscriberF.FibonacciEvent += async(sender, args) =>
                                          await WriteUpdateAsyncFac(response, args.FibonacciResult);

            subscriberF.CreateActor();
            var actionsTask = HandleActions(request, subscriberF, context.CancellationToken);

            _logger.LogInformation("Subscription started.");
            await AwaitCancellation(context.CancellationToken);

            try
            {
                await actionsTask;
            }
            catch
            {
                /* Ignored */
            }

            _logger.LogInformation("Subscription finished.");
        }
        public override async Task Subscribe(IAsyncStreamReader <ServerRequest> request, IServerStreamWriter <ServerResponse> response, ServerCallContext context)
        {
            using var subscriberF = _factoryMethod.GetFibonacciSubscriber();
            using var subscriberM = _factoryMethod.GetMemberSubscriber();

            /*    subscriberF.FibonacciEvent += async (sender, args) =>
             *      await WriteUpdateAsync(response, args.FibonacciResult);
             *
             *  subscriberM.MemberEvent += async (sender, args) =>
             *      await WriteUpdateAsync(response, args.MembersResult);
             */
            subscriberF.CreateActor();
            subscriberM.CreateActor();
            var actionsTask  = HandleActions(request, subscriberF, context.CancellationToken);
            var actionsTask2 = HandleActions(request, subscriberM, context.CancellationToken);

            _logger.LogInformation("Subscription started.");
            await AwaitCancellation(context.CancellationToken);

            try {
                await Task.WhenAll(new Task[] { actionsTask, actionsTask2 });
            } catch
            {
                /* Ignored */
            }

            _logger.LogInformation("Subscription finished.");
        }