using System; using System.Collections.Generic; using System.Linq; using System.Text; using TokenBucketLib; using System.Threading; using System.Threading.Tasks; namespace TokenBucketTest { class Program { static void Main(string[] args) { TokenBucket tb = TokenBucketFactory.Buid(2, 10, 10); tb.Put += new Action(tb_Put); tb.Start(); Thread.Sleep(1000); Task t1 = Task.Factory.StartNew(() => Consumer(tb, 1)); Task t2 = Task.Factory.StartNew(() => Consumer(tb, 2)); Thread.Sleep(2000); t2.Wait(); t1.Wait(); } static void Consumer(TokenBucket tb, int taskid) { for (int i = 0; i < 20; i++) { Thread.Sleep(200); var pass = tb.GetToken(); Console.WriteLine("task{2} 请求令牌 Cur:{1} Res:{0}", pass.State.ToString(), tb.CurCount, taskid); } } static void tb_Put(TokenBucket arg) { Console.WriteLine("添加令牌 Cur:{0} Max:{1}", arg.CurCount, arg.BS); } } }