OperationBrocker.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Collections.Concurrent;
6 using sage.ew.interficies;
7 using System.Diagnostics;
8 using sage.ew.db;
9 
10 namespace sage.addons.rgpd.Negocio
11 {
15  internal class OperationBroker
16  {
17  ConcurrentQueue<IOperacion> _lisOperaciones = new ConcurrentQueue<IOperacion>();
18 
23  public void _AddOperacion(IOperacion toOperacion)
24  {
25  _lisOperaciones.Enqueue(toOperacion);
26  }
27 
31  public void _EjecutarOperaciones()
32  {
33  Stopwatch loTimer = new Stopwatch();
34  loTimer.Start();
35 
36  var sbQuerySql = new StringBuilder();
37 
38  Trace.WriteLineIf(Debugger.IsAttached, "Lista con " + _lisOperaciones.Count + " operaciones ");
39 
40  IOperacion loOperacion;
41  while (_lisOperaciones.TryDequeue(out loOperacion))
42  {
43  if (loOperacion is IQueryOperacion)
44  sbQuerySql.Append(((IQueryOperacion)loOperacion)._GetQuery());
45  else //Si no es de la variante query la ejecuto
46  loOperacion._Execute();
47  }
48 
49  //Llegados a este punto ya tengo el query... hago un task de 'fire and forget' ya que no puedo hacer nada si falla.
50  var queryString = sbQuerySql.ToString();
51  if (!string.IsNullOrWhiteSpace(queryString)) //Sino hay nada
52  {
53  System.Threading.Tasks.Task loTask = new System.Threading.Tasks.Task(() => DB.SQLExec(queryString));
54  loTask.Start();
55  loTask.Wait();
56  }
57 
58  loTimer.Stop();
59  Trace.WriteLineIf(Debugger.IsAttached, "EjecuciĆ³n finalizada " + loTimer.Elapsed.TotalMilliseconds.ToString());
60  }
61  }
62 }
Es como el tipo de entrada asientos pero por negocio, sin formulario, pq quiero que me haga las propu...
Interfaz para operaciones
Definition: IOperacion.cs:11
Interfaz para operaciones que tienen la posibilidad de devolver un query sin ejecutar ...
Definition: IOperacion.cs:24