public async Task <QueueReceiveResult <T> > TryReceiveMessage() { var qrr = new QueueReceiveResult <T>(); try { var receiveMessageRequest = new ReceiveMessageRequest { QueueUrl = _queueUrl, MaxNumberOfMessages = 1 }; var receiveMessageResponse = await _sqs.ReceiveMessageAsync(receiveMessageRequest); //Console.WriteLine("Receive"); if (receiveMessageResponse.Messages.Count < 1) { return new QueueReceiveResult <T> { Ok = false } } ; var message = receiveMessageResponse.Messages[0]; var res = Serializer.Deserialize <QueueMessageWithId <T> >(Encoding.UTF8.GetBytes(message.Body)); var handle = message.ReceiptHandle; return(new QueueReceiveResult <T> { Ok = true, Id = res.Id, Value = res.Payload, DeleteHandle = handle }); } catch { return(new QueueReceiveResult <T> { Ok = false }); } }
private static void Queue() { var redis = new Redis(keyNameSpace: "RedisQueueTests"); var queue = new RedisQueue <string>(redis, "CouldSendAndReceiveMessages", timeout: 5000); const int n = 10000; var sw = new Stopwatch(); sw.Start(); var producer1 = Task.Run(async() => { //await Task.Delay(1000); for (var i = 0; i < n; i++) { await queue.TrySendMessage(i.ToString()); //await queue.TrySendMessage(new String('x', i*1)); //await Task.Delay(50); } }); //var producer2 = Task.Run(async () => { // for (var i = n; i < 2*n; i++) { // await queue.TrySendMessage(i.ToString()); // //await Task.Delay(50); // } //}); var consumer = Task.Run(async() => { var c = 0; while (true) { //await Task.Delay(100); QueueReceiveResult <string> message = default(QueueReceiveResult <string>); try { message = await queue.TryReceiveMessage(); } catch (Exception e) { Console.WriteLine(e); } c++; //if (message.OK) { Console.WriteLine(message.Value); } if (message.Ok) { await queue.TryDeleteMessage(message.DeleteHandle); } if (message.Ok && c == n) { break; // n * 2 } } }); producer1.Wait(); //producer2.Wait(); consumer.Wait(); sw.Stop(); Console.WriteLine($"Elapsed: {sw.ElapsedMilliseconds}"); queue.Dispose(); //Thread.Sleep(2000); }