根据工作实际需求做一个笔记。
现在有三个接口 A>B>C,A和C是我们的,B是别人的,现在有个要求,某一些用户访问B的时候需要等待一些时间,一开始想的是直接用Thread.splee(xxx)来进行等待。但是这样容易造成阻塞。
后来我就想把需要等待的都丢带一个队列里面Queue里面去,然后写一个线程去定时遍历这个队列,这样就不会阻塞了。又后来,我看到了别人给我的提示await Task.Delay(xxx);,我就想到异步,异步不就是来针对这种情况的嘛,真的是,之前看了那么多关于异步的知识,到用的时候就想不起来。后来我就新建一个异步方法,然后把需要等待的用户就调用这个异步方法,也不用担心异步线程过多,因为异步是基于线程池的,线程池机制是当达到最大线程数量的时候多余的线程会呈现排队状态,跟队列是一样的。
下面写了个简单的调用过程用作笔记:
static void Main(string[] args)
{
Console.WriteLine("我是同步方法1");
test();
Console.WriteLine("我是同步方法2");
Thread.Sleep(5000);
}
public async static Task testc()
{
await Task.Delay(3000);//3s
Console.WriteLine("我是异步方法");
}
static async void test()
{
await testc();
}
再多说一句,我为什么会想到队列而没想到异步,是因为前面好多操作都是用队列操作的,异步几乎没用到。后来项目里面有个地方需要使用到线程池去了解了一下异步,看来多看还是不行,需要多操作才能有效果。笔记!