43 lines
1.2 KiB
C#
43 lines
1.2 KiB
C#
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|