public TrackerController ( SingleThreadAsyncDequeueProcessorSlim <JToken> asyncDequeueProcessor ) { _asyncDequeueProcessor = asyncDequeueProcessor; }
public void ConfigureServices(IServiceCollection services) { ConfigurationHelper .Load(Configuration); services .Configure <CsvFormatterOptions> ( Configuration .GetSection ( "ExportCsvFormatter" ) ); services .AddMvc ( #if NETCOREAPP3_X (option) => { option.EnableEndpointRouting = false; } #endif ) #if NETCOREAPP3_X .AddNewtonsoftJson() #endif //.SetCompatibilityVersion // ( // CompatibilityVersion // .Version_2_1 // ) ; // for both NETCOREAPP2_X and NETCOREAPP3_X // for Sync or Async Action Selector services .TryAddEnumerable ( ServiceDescriptor .Singleton < IApplicationModelProvider , ConfigurableActionConstrainedRouteApplicationModelProvider <ConstrainedRouteAttribute> > ( (x) => { return (new ConfigurableActionConstrainedRouteApplicationModelProvider <ConstrainedRouteAttribute> ( Configuration , (attribute) => { return new ConfigurableActionConstraint <ConstrainedRouteAttribute> ( attribute , (actionConstraintContext, constrainedRouteAttribute) => { var r = (actionConstraintContext.Candidates.Count == 1); if (!r) { var routeContext = actionConstraintContext.RouteContext; var httpContext = routeContext .HttpContext; var request = httpContext .Request; var type = typeof(AbstractStoreProceduresExecutorControllerBase); var currentCandidateAction = actionConstraintContext .CurrentCandidate .Action; var isAsyncExecuting = ((ControllerActionDescriptor)currentCandidateAction) .MethodInfo .IsAsync(); var routeName = routeContext .RouteData .Values["routeName"] .ToString(); var httpMethod = $"Http{request.Method}"; var isAsyncExecutingInConfiguration = false; var accessingConfigurationKey = "DefaultAccessing"; if (request.Path.ToString().Contains("/export/", StringComparison.OrdinalIgnoreCase)) { accessingConfigurationKey = "exporting"; } if ( constrainedRouteAttribute .Configuration .TryGetSection ( $"Routes:{routeName}:{httpMethod}:{accessingConfigurationKey}:isAsyncExecuting" , out var isAsyncExecutingConfiguration ) ) { isAsyncExecutingInConfiguration = isAsyncExecutingConfiguration.Get <bool>(); } r = (isAsyncExecutingInConfiguration == isAsyncExecuting); } return r; } ); } )); } ) ); //services // .AddSingleton // <JTokenParametersValidateFilterAttribute> // (); #region 异步批量入库案例专用 var processor = new SingleThreadAsyncDequeueProcessorSlim <JToken>(); ConcurrentDictionary <string, ExecutingInfo> executingCachingStore = new ConcurrentDictionary <string, ExecutingInfo>(); services .AddSingleton(executingCachingStore); var executor = new MsSqlStoreProceduresExecutor(executingCachingStore); processor .StartRunDequeueThreadProcess ( (i, data) => { //Debugger.Break(); var ja = new JArray(data); var jo = new JObject { ["udt_vcidt"] = ja }; var sqlConnection = new SqlConnection("Initial Catalog=test;Data Source=localhost;User=sa;Password=!@#123QWE"); executor .ExecuteJsonResults ( sqlConnection , "zsp_Test" , jo , ( resultSetIndex , reader , rowIndex , columnIndex , fieldType , fieldName ) => { return(true, null); } ); }