コード例 #1
0
ファイル: MsSqlBatcher.cs プロジェクト: xiawei666/fireasy2
        /// <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);
            }
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
ファイル: AsyncTask.cs プロジェクト: HoXP/LuaFrameworkDemo
 public void executeToUIThread()
 {
     lock (this)
     {
         mAsyncTaskInterfaceDelegate.State = AsyncTaskStates.RunInUIThread;
         AsyncTaskManager.AddTaskDelegate(mAsyncTaskInterfaceDelegate);
     }
 }
コード例 #4
0
        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"]);
            }
        }
コード例 #5
0
ファイル: AppLaunch.cs プロジェクト: HoXP/LuaFrameworkDemo
 private void Awake()
 {
     ms_Instance = this;
     InitGameObject();
     XLuaManager.Instance.PreLoaderLua(); //将base的lua全都加载进来
     XLuaManager.Instance.OnInit();       //初始化
     //初始化异步任务
     AsyncTaskManager.Setup();
 }
コード例 #6
0
 void OnApplicationQuit()
 {
     if (!IsCreated)
     {
         return;
     }
     IsCreated = false;
     AsyncTaskManager.OnQuit();
 }
コード例 #7
0
ファイル: AsyncTaskManagerTest.cs プロジェクト: fiftin/oblqo
 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);
 }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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();
        }
コード例 #11
0
        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());
        }
コード例 #12
0
        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");
        }
コード例 #13
0
 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();
         }
     });
 }
コード例 #14
0
        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);
        }
コード例 #15
0
 public GamesMonitoringService()
 {
     asyncTaskManager = new AsyncTaskManager(async(cancellationToken) =>
     {
         while (!cancellationToken.IsCancellationRequested)
         {
             try
             {
                 await Task.Delay(5000);
                 CheckProcesses();
             } catch (Exception ex)
             {
                 Console.WriteLine(ex);
             }
         }
     });
 }
コード例 #16
0
ファイル: AsyncTask.cs プロジェクト: HoXP/LuaFrameworkDemo
 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);
 }
コード例 #17
0
        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) { }
        }
コード例 #18
0
ファイル: MsSqlBatcher.cs プロジェクト: xiawei666/fireasy2
        /// <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);
            }
        }
コード例 #19
0
ファイル: MsSqlBatcher.cs プロジェクト: xiawei666/fireasy2
        /// <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);
            }
        }
コード例 #20
0
        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);
        }
コード例 #21
0
        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");
                }
            }
        }
コード例 #22
0
        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);
            }
        }
コード例 #23
0
ファイル: ActionFilter.cs プロジェクト: jclown/test
        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();
                    }
                }
            }
        }
コード例 #24
0
ファイル: AsyncTaskManagerTest.cs プロジェクト: fiftin/oblqo
 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);
 }
コード例 #25
0
ファイル: AsyncTask.cs プロジェクト: HoXP/LuaFrameworkDemo
 static AsyncTask()
 {
     AsyncTaskManager.Setup();
 }
コード例 #26
0
        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();
        }
コード例 #27
0
ファイル: AsyncTaskManagerTest.cs プロジェクト: fiftin/oblqo
 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);
         }
     }
 }
コード例 #28
0
 void Update()
 {
     AsyncTaskManager.OnUpdate();
 }
コード例 #29
0
 /// <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)));
 }
コード例 #30
0
 /// <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)));
 }
コード例 #31
0
ファイル: AsyncTaskManagerTest.cs プロジェクト: fiftin/oblqo
        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);
        }
コード例 #32
0
 /// <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)));
 }
コード例 #33
0
        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)
            //{

            //}
        }