예제 #1
0
        private void btnScheduler_Click(object sender, EventArgs e)
        {
            TaskHelper.UITask.Run(() =>
            {
                Log("开始");
                LimitedTaskScheduler scheduler = new LimitedTaskScheduler(100);

                List <Task> taskList = new List <Task>();
                for (int i = 0; i < 10; i++)
                {
                    Task task = scheduler.Run(() =>
                    {
                        //Thread.Sleep(100);
                        this.TryBeginInvoke2(() =>
                        {
                            Log("LimitedTaskScheduler测试");
                        });
                    });
                    taskList.Add(task);
                }

                Task.WaitAll(taskList.ToArray());

                scheduler.Dispose();
            });
        }
예제 #2
0
 public LibraryScanner(
     ILibraryApiAdapter apiAdapter,
     ITrackRepository trackRepository,
     ICacheInfoRepository cacheInfoRepository)
 {
     _apiAdapter          = apiAdapter;
     _trackRepository     = trackRepository;
     _cacheInfoRepository = cacheInfoRepository;
     _timer = new IntervalTimer {
         Interval = 60 * 1000
     };
     _timer.Elapsed += (sender, args) => Update();
     _scheduler      = new LimitedTaskScheduler(1);
     _cts            = new CancellationTokenSource();
 }
예제 #3
0
        public SocketServer(
            ProtocolHandler handler,
            ITinyMessengerHub hub,
            Authenticator auth,
            PersistenceManager settings)
        {
            _handler  = handler;
            _hub      = hub ?? throw new ArgumentNullException(nameof(hub));
            _auth     = auth;
            _settings = settings;
            _availableWorkerSockets = new ConcurrentDictionary <string, Socket>();
            TaskScheduler scheduler = new LimitedTaskScheduler(2);

            _factory = new TaskFactory(scheduler);

            _hub.Subscribe <RestartSocketEvent>(eEvent => RestartSocket());
            _hub.Subscribe <ForceClientDisconnect>(eEvent => DisconnectSocket(eEvent.ConnectionId));
            _hub.Subscribe <BroadcastEventAvailable>(eEvent => Broadcast(eEvent.BroadcastEvent));
            _hub.Subscribe <PluginResponseAvailableEvent>(eEvent => Send(eEvent.Message, eEvent.ConnectionId));
        }
예제 #4
0
        /// <summary>
        /// 创建一个可限制并发任务数的任务工厂
        /// </summary>
        /// <param name="maxTaskCount">最大并发任务数</param>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        /// <returns></returns>
        public static TaskFactory NewFactory(int maxTaskCount)
        {
            var scheduler = new LimitedTaskScheduler(maxTaskCount);

            return(new TaskFactory(scheduler));
        }
예제 #5
0
 /// <summary>
 /// 创建一个可限制并发任务数的任务工厂
 /// </summary>
 /// <param name="maxTaskCount">最大并发任务数</param>
 /// <exception cref="ArgumentOutOfRangeException"></exception>
 /// <returns></returns>
 public static TaskFactory NewFactory(int maxTaskCount)
 {
     var scheduler = new LimitedTaskScheduler(maxTaskCount);
     return new TaskFactory(scheduler);
 }
예제 #6
0
 private static TaskFactory GetTaskFactory(this TwitterAccount account)
 {
     return(_accountTaskFactories.GetOrAdd(account.Id, _ => LimitedTaskScheduler.GetTaskFactory(1)));
 }