예제 #1
0
        private async IAsyncEnumerable <T> Impl([EnumeratorCancellation] CancellationToken cancellationToken = default)
        {
            var updates = _context.GetNotifications(_delegateName).StreamParameterItemUpdates <T>(
                _streamName, _parameterName, cancellationToken);

            await foreach (var(_, item) in updates.WithCancellation(cancellationToken))
            {
                yield return(item);
            }
        }
예제 #2
0
        private async Task ListenAsync(CancellationToken cancellationToken)
        {
            var triggers = _context.GetNotifications(_delegateName).WorkerTriggers(cancellationToken);

            await foreach (var(streamName, workerName) in triggers.WithCancellation(cancellationToken))
            {
                var triggerValue = new PerperModuleContext(streamName, _delegateName, workerName, _context);
                await _executor.TryExecuteAsync(
                    new TriggeredFunctionData { TriggerValue = triggerValue },
                    cancellationToken);
            }
        }
예제 #3
0
        private async Task ListenAsync(CancellationToken cancellationToken)
        {
            var executions = new List <Task>();
            var triggers   = _context.GetNotifications(_delegateName).StreamTriggers(cancellationToken);

            await foreach (var streamName in triggers.WithCancellation(cancellationToken))
            {
                executions.Add(ExecuteAsync(streamName, cancellationToken));
            }

            await Task.WhenAll(executions);
        }
예제 #4
0
        private async Task ListenAsync(CancellationToken cancellationToken)
        {
            var triggers = _context.GetNotifications(_delegateName).WorkerTriggers(cancellationToken);

            await foreach (var(streamName, workerName) in triggers.WithCancellation(cancellationToken))
            {
                var triggerValue = new PerperWorkerContext {
                    StreamName = streamName, WorkerName = workerName
                };
                await _executor.TryExecuteAsync(
                    new TriggeredFunctionData { TriggerValue = _triggerValueConverter.Convert(triggerValue) },
                    cancellationToken);
            }
        }
예제 #5
0
        public async Task <T> CallWorkerAsync <T>(string name, object parameters, CancellationToken cancellationToken)
        {
            var data       = _context.GetData(StreamName);
            var workerName = await data.CallWorkerAsync(GenerateName(name), name, DelegateName, parameters);

            var notifications = _context.GetNotifications(DelegateName);

            await foreach (var _ in notifications.WorkerResultSubmissions(StreamName, workerName, cancellationToken))
            {
                return(await data.ReceiveWorkerResultAsync <T>(workerName));
            }

            throw new TimeoutException();
        }