/// <summary> /// 将 <see cref="DataTable"/> 的数据批量插入到数据库中。 /// </summary> /// <param name="database">提供给当前插件的 <see cref="IDatabase"/> 对象。</param> /// <param name="dataTable">要批量插入的 <see cref="DataTable"/>。</param> /// <param name="batchSize">每批次写入的数据量。</param> /// <param name="completePercentage">已完成百分比的通知方法。</param> public async Task InsertAsync(IDatabase database, DataTable dataTable, int batchSize = 1000, Action <int> completePercentage = null) { if (!BatcherChecker.CheckDataTable(dataTable)) { return; } try { database.Connection.TryOpen(); //给表名加上前后导符 var tableName = DbUtility.FormatByQuote(database.Provider.GetService <ISyntaxProvider>(), dataTable.TableName); using (var bulk = new SqlBulkCopy((SqlConnection)database.Connection, SqlBulkCopyOptions.KeepIdentity, (SqlTransaction)database.Transaction) { DestinationTableName = tableName, BatchSize = batchSize }) using (var reader = new DataTableBatchReader(bulk, dataTable)) { await AsyncTaskManager.Adapter(bulk.WriteToServerAsync(reader)); } } catch (Exception exp) { throw new BatcherException(dataTable.Rows, exp); } }
public async Task ShouldBeCompletedСonsequentiallyAsync() { var env = await TestEnvironment.CreateSimpleAsync(); var man = new AsyncTaskManager(new MockConfigurationStorage()); man.MaxNumberOfTasksRunning = 1; List <LockTask> tasks = new List <LockTask>(); for (int i = 0; i < 10; i++) { var newTask = new LockTask(env.Account); tasks.Add(newTask); man.Add(newTask); } for (var i = 0; i < 10; i++) { var currentTask = tasks[i]; currentTask.locker.Set(); Assert.IsTrue(currentTask.CompleteWaitHandle.WaitOne()); Assert.AreEqual(AsyncTaskState.Completed, currentTask.State); for (var k = i + 2; k < 10; k++) { var task = tasks[k]; Assert.AreEqual(AsyncTaskState.Waiting, task.State); } } }
public void executeToUIThread() { lock (this) { mAsyncTaskInterfaceDelegate.State = AsyncTaskStates.RunInUIThread; AsyncTaskManager.AddTaskDelegate(mAsyncTaskInterfaceDelegate); } }
private static void taskManager_TasksExecutionCompleted(object sender, EventArgs e) { AsyncTaskManager asyncTaskManager = sender as AsyncTaskManager; if (asyncTaskManager != null && asyncTaskManager.ResultData.Count > 0 && asyncTaskManager.ResultData.ContainsKey("Retrieve Google Map Data")) { MyCommands.ShowTaskDataInForm(asyncTaskManager.ResultData["Retrieve Google Map Data"]); } }
private void Awake() { ms_Instance = this; InitGameObject(); XLuaManager.Instance.PreLoaderLua(); //将base的lua全都加载进来 XLuaManager.Instance.OnInit(); //初始化 //初始化异步任务 AsyncTaskManager.Setup(); }
void OnApplicationQuit() { if (!IsCreated) { return; } IsCreated = false; AsyncTaskManager.OnQuit(); }
public void ShouldBeAsync() { var man = new AsyncTaskManager(new MockConfigurationStorage()); // very long task var task = new LockTask(100000); man.Add(task); // wait short a time and check state Assert.IsFalse(task.CompleteWaitHandle.WaitOne(100)); Assert.AreNotEqual(AsyncTaskState.Completed, task.State); Assert.IsFalse(task.ok); }
public void ShouldBeCompletedAtTime() { var man = new AsyncTaskManager(new MockConfigurationStorage()); var task = new LockTask(); man.Add(task); Assert.IsFalse(task.ok); task.locker.Set(); Assert.IsTrue(task.CompleteWaitHandle.WaitOne()); Assert.IsTrue(task.ok); Assert.AreEqual(AsyncTaskState.Completed, task.State); }
public void TransTest2() { //测试结果-事实没有保证一致性 AsyncTaskManager.RunSync(() => trans.StringSetAsync("testhashset21", DateTime.Now.ToString())); AsyncTaskManager.RunSync(() => trans.StringSetAsync("testhashset22", DateTime.Now.ToString())); var result = AsyncTaskManager.RunSync <RedisValue>(() => { return(trans.StringGetAsync("testhashset16")); }); trans.Execute(); }
public async Task TestSyncronizeDriveFileTask(TestEnvironment env, SynchronizeDriveFileTask task) { var man = new AsyncTaskManager(new MockConfigurationStorage()); man.Add(task); task.CompleteWaitHandle.WaitOne(); var syncedFile = await env.GetFileByFullPathAsync("/photos2015/PHOTO2.jpg"); Assert.AreEqual(2, syncedFile.DriveFiles.Count); Assert.AreEqual(((MockDriveFile)syncedFile.DriveFiles[0]).Name, ((MockDriveFile)syncedFile.DriveFiles[1]).Name); Assert.AreEqual(((MockDriveFile)syncedFile.DriveFiles[0]).content.ToString(), ((MockDriveFile)syncedFile.DriveFiles[1]).content.ToString()); }
public async Task TestDeleteFolderTask() { var man = new AsyncTaskManager(new MockConfigurationStorage()); var env = await TestEnvironment.CreateSimpleAsync(); var folder = await env.GetFolderByFullPathAsync("photos2015"); var task = new DeleteFolderTask(env.Account, "", 0, new AsyncTask[0], folder); man.Add(task); // throws exception becouse directory isn't exists await env.GetFolderByFullPathAsync("photos2015"); }
public WebServerBase(int port) { listener = new TcpListener(new IPEndPoint(IPAddress.Any, port)); asyncTaskManager = new AsyncTaskManager(async(cancellationToken) => { while (!cancellationToken.IsCancellationRequested) { var client = await listener.AcceptTcpClientAsync(); cancellationToken.ThrowIfCancellationRequested(); new Task(() => ProcessClient(client), cancellationToken).Start(); } }); }
public async Task TestCreateFolderTask() { var man = new AsyncTaskManager(new MockConfigurationStorage()); var env = await TestEnvironment.CreateSimpleAsync(); var folder = await env.GetFolderByFullPathAsync("photos2015"); var task = new CreateFolderTask(env.Account, "", 0, new AsyncTask[0], "new", folder); man.Add(task); task.CompleteWaitHandle.WaitOne(); var newFolder = await env.GetFolderByFullPathAsync("photos2015/new"); Assert.AreEqual("new", newFolder.Name); }
public GamesMonitoringService() { asyncTaskManager = new AsyncTaskManager(async(cancellationToken) => { while (!cancellationToken.IsCancellationRequested) { try { await Task.Delay(5000); CheckProcesses(); } catch (Exception ex) { Console.WriteLine(ex); } } }); }
public bool execute(List <object> args) { lock (this) { if (!mIsBusy) { mIsBusy = true; mArgs = args; mAsyncTaskInterfaceDelegate.State = AsyncTaskStates.Initial; AsyncTaskManager.AddTaskDelegate(mAsyncTaskInterfaceDelegate); //ljfth:默认大概60个线程,如果同一时间执行的线程过都,QueueUserWorkItem会自动给排队等候 ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFunc)); return(true); } } return(false); }
public async Task TestDeleteEmptyFolderTask() { var env = await TestEnvironment.CreateSimpleAsync(); var folder = await env.GetFolderByFullPathAsync("/lenovo"); var task = new DeleteEmptyFolderTask(env.Account, "", 10, new AsyncTask[0], folder); var man = new AsyncTaskManager(new MockConfigurationStorage()); man.Add(task); task.CompleteWaitHandle.WaitOne(); try { await env.GetFolderByFullPathAsync("/lenovo"); Assert.Fail(); } catch (ArgumentException) { } }
/// <summary> /// 将 <paramref name="reader"/> 中的数据流批量复制到数据库中。 /// </summary> /// <param name="database">提供给当前插件的 <see cref="IDatabase"/> 对象。</param> /// <param name="reader">源数据读取器。</param> /// <param name="tableName">要写入的数据表的名称。</param> /// <param name="batchSize">每批次写入的数据量。</param> /// <param name="completePercentage">已完成百分比的通知方法。</param> public async Task InsertAsync(IDatabase database, IDataReader reader, string tableName, int batchSize = 1000, Action <int> completePercentage = null) { try { database.Connection.TryOpen(); //给表名加上前后导符 using (var bulk = new SqlBulkCopy((SqlConnection)database.Connection, SqlBulkCopyOptions.KeepIdentity, (SqlTransaction)database.Transaction) { DestinationTableName = tableName, BatchSize = batchSize }) await AsyncTaskManager.Adapter(bulk.WriteToServerAsync((DbDataReader)reader)); } catch (Exception exp) { throw new BatcherException(null, exp); } }
/// <summary> /// 将一个 <see cref="IList"/> 批量插入到数据库中。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="database">提供给当前插件的 <see cref="IDatabase"/> 对象。</param> /// <param name="list">要写入的数据列表。</param> /// <param name="tableName">要写入的数据表的名称。</param> /// <param name="batchSize">每批次写入的数据量。</param> /// <param name="completePercentage">已完成百分比的通知方法。</param> public async Task InsertAsync <T>(IDatabase database, IEnumerable <T> list, string tableName, int batchSize = 1000, Action <int> completePercentage = null) { try { database.Connection.TryOpen(); //给表名加上前后导符 using (var bulk = new SqlBulkCopy((SqlConnection)database.Connection, SqlBulkCopyOptions.KeepIdentity, (SqlTransaction)database.Transaction) { DestinationTableName = tableName, BatchSize = batchSize }) using (var reader = new EnumerableBatchReader <T>(bulk, list)) { await AsyncTaskManager.Adapter(bulk.WriteToServerAsync(reader)); } } catch (Exception exp) { throw new BatcherException(list.ToList(), exp); } }
public async Task ShouldBeCompletedhHierarchically() { var env = await TestEnvironment.CreateSimpleAsync(); var createFolder = new LockTask(env.Account); var createSubfolder = new LockTask(env.Account, 10, new AsyncTask[] { createFolder }); var uploadFile1 = new LockTask(env.Account, 10, new AsyncTask[] { createSubfolder }); var uploadFile2 = new LockTask(env.Account, 10, new AsyncTask[] { createSubfolder }); var deleteFile2 = new LockTask(env.Account, 10, new AsyncTask[] { uploadFile2 }); var man = new AsyncTaskManager(new MockConfigurationStorage()); man.Add(createFolder); man.Add(createSubfolder); man.Add(uploadFile1); man.Add(uploadFile2); man.Add(deleteFile2); createFolder.locker.Set(); Assert.IsFalse(createSubfolder.ok); createSubfolder.locker.Set(); Assert.IsFalse(uploadFile1.ok); uploadFile1.locker.Set(); Assert.IsFalse(uploadFile2.ok); uploadFile2.locker.Set(); Assert.IsFalse(deleteFile2.ok); deleteFile2.locker.Set(); Assert.IsTrue(deleteFile2.CompleteWaitHandle.WaitOne()); Assert.IsTrue(createFolder.ok); Assert.IsTrue(createSubfolder.ok); Assert.IsTrue(uploadFile1.ok); Assert.IsTrue(uploadFile2.ok); Assert.IsTrue(deleteFile2.ok); }
public static void RunAsyncTasks() { Document mdiActiveDocument = Application.DocumentManager.MdiActiveDocument; if (mdiActiveDocument != null) { mdiActiveDocument.Editor.WriteMessage("\nStart tasks execution...\n"); } try { AsyncTaskManager asyncTaskManager = new AsyncTaskManager(); asyncTaskManager.TasksExecutionCompleted += new EventHandler(MyCommands.taskManager_TasksExecutionCompleted); asyncTaskManager.RunTasks(); } catch (Exception ex) { if (mdiActiveDocument != null) { mdiActiveDocument.Editor.WriteMessage("\nInitializing process error:\n" + ex.Message + "\n"); } } }
public void Add(AutoSave savable) { lock (m_threads) { var bot = savable.Bot; AsyncTaskManager value; if (!m_threads.TryGetValue(savable.Bot, out value)) { m_threads[bot] = value = new AsyncTaskManager(bot); bot.EndShutdown += bot_EndShutdown; } value.Add(savable); } }
public void OnActionExecuting(ActionExecutingContext context) { var api = context.ActionDescriptor.AttributeRouteInfo.Template; var isEnableLog = IsEnableLog(context); try { // 设置当前访问信息 string clientInfo = context.HttpContext.Connection?.RemoteIpAddress.ToString(); string requestId = context.HttpContext.Request.Headers["requestId"]; if (string.IsNullOrEmpty(requestId)) { requestId = context.HttpContext.TraceIdentifier; context.HttpContext.Request.Headers["requestId"] = requestId; } app.ActionArguments = context.ActionArguments; AppManager.CurrentAppContext = app; // 记录日志 if (isEnableLog) { string parm = JsonConvert.SerializeObject(app.ActionArguments); app.LogRequest(requestId, context.ActionDescriptor.DisplayName, parm, clientInfo, context.ActionDescriptor.AttributeRouteInfo.Template); } // 读取或设置sessionId和language if (IsEnableCookie(context)) { InitCookies(api); } // 访问限制,登录等方法不受限制 if (AuthenticationProxy.IsCheckGateway(context)) { var clientIp = context.HttpContext.Connection?.RemoteIpAddress.ToString(); if (!string.IsNullOrEmpty(clientIp)) { GatewayManager.Check(clientIp); } } var authentication = app.GetService <IAuthenticationProxy>(); // 鉴权-检查用户token,设置当前用户上下文 var token = (context.HttpContext.Request.Headers[ApiDocManager.TokenHeaderName]).ToString().Replace("Bearer ", ""); if (AuthenticationProxy.IsCheckToken(context) || !string.IsNullOrEmpty(token)) { if (ConfigManager.Configuration["EnableApiDoc"] == "1" && string.IsNullOrEmpty(token)) { token = ConfigManager.Configuration["DefaultToken"]; } authentication.SetCurrentUser(token, context); } authentication.SetCurrentGuest(app.SessionID); // 检查数据 VaildateModel(context); // 异步 var asyncTask = AsyncTaskManager.GetTaskInfo(context, app.User?.UserID.ToString()); if (asyncTask != null) { var resultValue = ResultBuilder.AsSuccess(asyncTask); context.Result = new JsonResult(resultValue); return; } // 从缓存返回 var cacheResult = CacheManager.ReadCache(context, app); if (cacheResult != null) { cacheResult.RequestId = context.HttpContext.TraceIdentifier; var cacheTimeRate = CacheTimeSettings.GetCacheTimeRate(); var cacheSeconds = CacheManager.CalcCacheSeconds(context.ActionDescriptor as ControllerActionDescriptor, out var cacheTimeSetting); var seconds = cacheTimeRate.HttpCacheTime * cacheSeconds; if (seconds < 10) { seconds = 10; } if (seconds > 60) { seconds = 60; } context.HttpContext.Response.GetTypedHeaders().CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue() { Public = true, MaxAge = TimeSpan.FromSeconds(seconds) }; context.Result = new JsonResult(cacheResult); return; } } // 不捕获异常,由ExceptionFilter处理。 finally { if (context.Result != null) { CleanOnActionClose(); if (isEnableLog) { app.LogResponseResult(context.Result); app.EndRequest(); } } } }
static AsyncTask() { AsyncTaskManager.Setup(); }
protected override void Initialize() { // UIManager を初期化して登録します。 uiManager = new UIManager(this); uiManager.ScreenFactory = CreateScreenFactory(); Components.Add(uiManager); var fpsCounter = new FpsCounter(this); fpsCounter.Content.RootDirectory = "Content"; fpsCounter.HorizontalAlignment = DebugHorizontalAlignment.Right; fpsCounter.SampleSpan = TimeSpan.FromSeconds(2); Components.Add(fpsCounter); timeRuler = new TimeRuler(this); Components.Add(timeRuler); updateMarker = timeRuler.CreateMarker(); updateMarker.Name = "Update"; updateMarker.BarIndex = 0; updateMarker.Color = Color.Cyan; drawMarker = timeRuler.CreateMarker(); drawMarker.Name = "Draw"; drawMarker.BarIndex = 1; drawMarker.Color = Color.Yellow; // StorageManager を登録します。 storageManager = new StorageManager(this); storageManager.ContainerSelected += (s, c) => { // IBoxService が登録されているならば BoxIntegration を初期化します。 if (boxManager != null) { BoxIntegration.Initialize(); } }; Components.Add(storageManager); // StorageBlockManager を登録します。 storageBlockManager = new StorageBlockManager(this); // AsyncTaskManager を登録します。 asyncTaskManager = new AsyncTaskManager(this); Components.Add(asyncTaskManager); // IBoxService を登録します。 var assemblyFile = "Willcraftia.Net.Box.BlockViewer.ApiKey.dll"; var apiKeyClassName = "Willcraftia.Net.Box.BlockViewer.ApiKey"; try { boxManager = new BoxManager(assemblyFile, apiKeyClassName); Services.AddService(typeof(IBoxService), boxManager); BoxIntegration = new BoxIntegration(this); } catch { // IBoxService を無効とします。 } // マウス カーソルを可視にします。 IsMouseVisible = true; base.Initialize(); }
public async Task ShouldBeCompletedСonsequentiallyAsync() { var env = await TestEnvironment.CreateSimpleAsync(); var man = new AsyncTaskManager(new MockConfigurationStorage()); man.MaxNumberOfTasksRunning = 1; List<LockTask> tasks = new List<LockTask>(); for (int i = 0; i < 10; i++) { var newTask = new LockTask(env.Account); tasks.Add(newTask); man.Add(newTask); } for (var i = 0; i < 10; i++) { var currentTask = tasks[i]; currentTask.locker.Set(); Assert.IsTrue(currentTask.CompleteWaitHandle.WaitOne()); Assert.AreEqual(AsyncTaskState.Completed, currentTask.State); for (var k = i + 2; k < 10; k++) { var task = tasks[k]; Assert.AreEqual(AsyncTaskState.Waiting, task.State); } } }
void Update() { AsyncTaskManager.OnUpdate(); }
/// <summary> /// 将一个 <see cref="IList"/> 批量插入到数据库中。 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="database">提供给当前插件的 <see cref="IDatabase"/> 对象。</param> /// <param name="list">要写入的数据列表。</param> /// <param name="tableName">要写入的数据表的名称。</param> /// <param name="batchSize">每批次写入的数据量。</param> /// <param name="completePercentage">已完成百分比的通知方法。</param> public async Task InsertAsync <T>(IDatabase database, IEnumerable <T> list, string tableName, int batchSize = 1000, Action <int> completePercentage = null) { await AsyncTaskManager.Adapter(Task.Run(() => Insert(database, list, tableName, batchSize, completePercentage))); }
/// <summary> /// 将 <see cref="DataTable"/> 的数据批量插入到数据库中。 /// </summary> /// <param name="database">提供给当前插件的 <see cref="IDatabase"/> 对象。</param> /// <param name="dataTable">要批量插入的 <see cref="DataTable"/>。</param> /// <param name="batchSize">每批次写入的数据量。</param> /// <param name="completePercentage">已完成百分比的通知方法。</param> public async Task InsertAsync(IDatabase database, DataTable dataTable, int batchSize = 1000, Action <int> completePercentage = null) { await AsyncTaskManager.Adapter(Task.Run(() => Insert(database, dataTable, batchSize, completePercentage))); }
/// <summary> /// 将 <paramref name="reader"/> 中的数据流批量复制到数据库中。 /// </summary> /// <param name="database">提供给当前插件的 <see cref="IDatabase"/> 对象。</param> /// <param name="reader">源数据读取器。</param> /// <param name="tableName">要写入的数据表的名称。</param> /// <param name="batchSize">每批次写入的数据量。</param> /// <param name="completePercentage">已完成百分比的通知方法。</param> public async Task InsertAsync(IDatabase database, IDataReader reader, string tableName, int batchSize = 1000, Action <int> completePercentage = null) { await AsyncTaskManager.Adapter(Task.Run(() => Insert(database, reader, tableName, batchSize, completePercentage))); }
private void UpdateDataFromProfile(object obj) { var worker = new BackgroundWorker(); worker.WorkerSupportsCancellation = true; worker.DoWork += (p,arg)=>{ Thread act1 = new Thread(() => { Status = "Загрузка профиля"; LoadProfileInfo(); }); Thread act2 = new Thread(() => { Status = "Загрузка треков"; LoadAudioInfo(); }); var manager = new AsyncTaskManager<Sound>(); manager.Execute = new AsyncTaskManager<Sound>.ExecuteWork( (sound) => { try { Status = "Загружаем информацию о треках..." + sound.artist; var artist = Handlers.LastFmHandler.Api.Artist.GetInfo(sound.artist); sound.authorPhotoPath = artist.Images[2].Value; // little spike sound.similarArtists = artist.SimilarArtists.Select(el => el.Name).ToList<string>(); } //catch (DotLastFm.Api.Rest.LastFmApiException ex) catch (Exception ex) { } }); Thread act5 = new Thread(() => { InitDone(null, null); }); act1.IsBackground = true; act2.IsBackground = true; act5.IsBackground = true; act1.Start(); act1.Join(); act2.Start(); act2.Join(); //manager.Start(CachedSounds, Properties.Settings.Default.ThreadCountToUse); act5.Start(); act5.Join(); }; worker.RunWorkerAsync(); ProgressVisibility = true; //BackgroundWorker backgroundWorker = new BackgroundWorker(); //backgroundWorker.SyncFolderWithVKAsync += this.Init; //backgroundWorker.RunWorkerCompleted += this.InitDone; //backgroundWorker.RunWorkerAsync(); //while(backgroundWorker.IsBusy) //{ //} }