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()); }
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()); }
public void Dispatch_And_Process_Sequentially() { foreach (var message in _messages) { _sequentialCluster.Dispatch(() => { var primeNumber = FindPrimeNumber(1000); return(message); }); } }
public void Dispatch_And_Process_In_Parallel() { foreach (var message in _messages) { _parallelCluster.Dispatch(() => { var primeNumber = FindPrimeNumber(1000); return(message); }); } }
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(); }