Example #1
0
        public async Task Starter(int maxConcurrency, TimeSpan retry, CancellationToken cancellationToken)
        {
            taskQueue = new TaskQueue(maxConcurrency);

            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    //concurrencyLimiter = new SemaphoreSlim(maxConcurrency);
                    //runningReceiveTasks = new ConcurrentDictionary<Task, Task>();
                    sqlConnectionFactory = SqlConnectionFactory.Default(host.ConnectionString);
                    await Processor(cancellationToken).ConfigureAwait(false);

                    //await Task.WhenAll(runningReceiveTasks.Values).ConfigureAwait(false);

                    Trace.TraceInformation($"{host.Name} wait {retry}");
                    await Task.Delay(retry, cancellationToken).ConfigureAwait(false);
                }
                catch (OperationCanceledException)
                {
                    // For graceful shutdown purposes
                }
                catch (SqlException e) when(cancellationToken.IsCancellationRequested)
                {
                    Trace.TraceError("Exception thrown during cancellation", e);
                }
                catch (SqlException e) when(e.Number == -1)
                {
                    //Trace.TraceError($"Sql connection failed, retry {retry}");
                    await Task.Delay(retry, cancellationToken).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    Trace.TraceError($"Sql connector failed => {ex.Message}", ex);
                }
                finally
                {
                    //concurrencyLimiter.Dispose();
                }
            }
        }
Example #2
0
        async static Task AsyncMain(IServiceProvider serviceProvider)
        {
            var mp = serviceProvider.GetService <MessagePump>();

            await mp.Init(
                SqlConnectionFactory.Default("Data Source=localhost,1401;Initial Catalog=TestDB;User Id=sa;Password=tbmX1821;Connection Timeout=10;"),
                new TableBasedQueue("dbo", "CTQueue_Test", new[] { "RowVersion" }),
                context =>
            {
                var rowVersion = context.Message.Body.RowVersion;
                return(Task.FromResult(0));
            },
                error => Task.FromResult(ErrorHandleResult.RetryRequired)
                );

            mp.Start();
            Console.ReadLine();
            await mp.Stop();

            //svc.Init().Start(Environment.ProcessorCount, TimeSpan.FromSeconds(10));
            //Console.ReadLine();
            //await svc.Stop();
        }
Example #3
0
 public TableQueue(string name, string tableName, string connection)
 {
     this.Name              = name;
     this.tableName         = tableName;
     this.connectionFactory = SqlConnectionFactory.Default(connection);
 }
Example #4
0
 public MessageReceiveWithNoTransaction(SqlConnectionFactory connectionFactory)
 {
     this.connectionFactory = connectionFactory;
 }