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(); } } }
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(); }
public TableQueue(string name, string tableName, string connection) { this.Name = name; this.tableName = tableName; this.connectionFactory = SqlConnectionFactory.Default(connection); }
public MessageReceiveWithNoTransaction(SqlConnectionFactory connectionFactory) { this.connectionFactory = connectionFactory; }