示例#1
0
        private void InitIncomingThreads()
        {
            Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    Thread.Sleep(1000);
                    if (i % 2 == 0)
                    {
                        messageQueue.Enqueue(new SimpleMessage(i, "nolu mesaj işlendi. ilk thread"));
                    }
                }
            });
            Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    Thread.Sleep(1000);
                    if (i % 2 == 1)
                    {
                        messageQueue.Enqueue(new SimpleMessage(i, "nolu mesaj işlendi. ikinci thread"));
                    }
                }
            });

            for (int i = 0; i < 1000; i++)
            {
                Task.Factory.StartNew((s) =>
                {
                    databaseCommandQueue.Enqueue(() => //POCO objeleri yerine anonymous function ekledik kuyruğumuza
                    {
                        //Burası DB işlemlerini gerçekleştireceğimiz kısım

                        Thread.Sleep(100);
                        WriteInfo($"{s} nolu db işlemi gerçekleştirildi");//burada i değişkenini kullanamayız. Biz i değişkenini kullanana kadar Thread.Sleep yüzünden değişkenimiz çoktan 1000 olacaktır.
                    });
                }, i);
            }
        }
        private async Task CaptureJsonResponseAsync <T>(
            RequestType requestType,
            ResponseCreatedEventArgs args,
            Func <string, T> deserialize)
        {
            await Task.Yield();

            var body = await args.Response.TextAsync();

            var requestId = $"{DateTimeOffset.UtcNow.Ticks:D20}-{Guid.NewGuid():N}";

            _queue.Enqueue(new Response(
                               requestId,
                               _operationType,
                               _operationParameters,
                               requestType,
                               DateTimeOffset.UtcNow,
                               args.Response.Request.Method,
                               args.Response.Request.Url,
                               body));

            try
            {
                AddDeserializedResponse(
                    requestId,
                    deserialize(body));
            }
            catch (JsonException)
            {
                try
                {
                    AddDeserializedResponse(
                        requestId,
                        _deserializer.ErrorResponse(body));

                    var prettyJson = JObject.Parse(body).ToString(Formatting.Indented);
                    _logger.LogError(
                        $"An error was returned by Kroger.com:{Environment.NewLine}{{ErrorJson}}",
                        prettyJson);
                }
                catch
                {
                    // Ignore these failures.
                }

                throw;
            }
        }