Exemplo n.º 1
0
        public IActionResult Post([FromBody] Input input)
        {
            var requestIdentifier = Guid.NewGuid();

            _cluster.Dispatch(requestIdentifier,
                              () => new MovieReview
            {
                ReviewText = input.ReviewText
            });

            _cluster.Dispatch(requestIdentifier, new MovieDetails
            {
                Title = input.Title
            });
            return(Ok());
        }
Exemplo n.º 2
0
        public IActionResult Get()
        {
            var requestIdentifier = Guid.NewGuid();

            // We dispatch the func to be executed on a dedicated thread, the Linq expression will not be computed on this thread
            var headers = Request.Headers.ToList();

            _requestCluster.Dispatch(requestIdentifier, () => headers.Select(header =>
            {
                header.Deconstruct(out var key, out var value);
                return($"{key}:{value}");
            }).Aggregate((header1, header2) => string.Join(';', header1, header2)));

            // We post directly the value because there is nothing to compute here
            _requestCluster.Dispatch(requestIdentifier, Request.HttpContext.Connection.RemoteIpAddress);

            return(Ok());
        }
Exemplo n.º 3
0
 public void Dispatch_And_Process_Sequentially()
 {
     foreach (var message in _messages)
     {
         _sequentialCluster.Dispatch(() =>
         {
             var primeNumber = FindPrimeNumber(1000);
             return(message);
         });
     }
 }
Exemplo n.º 4
0
 public void Dispatch_And_Process_In_Parallel()
 {
     foreach (var message in _messages)
     {
         _parallelCluster.Dispatch(() =>
         {
             var primeNumber = FindPrimeNumber(1000);
             return(message);
         });
     }
 }
Exemplo n.º 5
0
        public async Task Dispatch_And_Process_In_Parallel()
        {
            var       body   = new ConcurrentBag <long>();
            const int target = 1_000;

            using var semaphore = new SemaphoreSlim(0);
            var messages = new ConcurrentBag <Message>();

            for (var i = 0; i < target; i++)
            {
                messages.Add(new Message(target, body, semaphore));
            }

            foreach (var message in messages)
            {
                _parallelCluster.Dispatch(message);
            }

            await semaphore.WaitAsync();
        }