TokenBucket/TokenBucketTest/Program.cs

43 lines
1.2 KiB
C#
Raw Normal View History

2019-04-25 17:03:09 +08:00
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<TokenBucket>(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);
}
}
}