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