使用async / await时实现请求的同步队列的正确方法

时间:2012-12-12 19:21:25

标签: c# async-await

我想知道是否有人可以指导我正确的方向来创建一个请求同步到需要这种模式的服务器的队列。

我想在我的代码中继续使用已经实现的async / await模式,并且能够将上传参数和下载结果(将使用JSON序列化)中的通用GET和POST请求排队。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我建议使用ActionBlock<T>中的TPL Dataflow library

或者,您可以使用AsyncProducerConsumerQueue中的AsyncEx library

答案 1 :(得分:0)

当您的服务完全同步时,您的客户端代码可能是异步的。 您可以设置ServiceBehaviorAttribute,以便您的服务执行另一个请求。 它甚至可以在您用来打开servicehost的同一个线程上运行。 如果您的服务从不执行'await',它将运行同步。使用此设计,您可以在需要时增强服务,而不会破坏客户端。 有关提示,请参阅my post

答案 2 :(得分:0)

如果您需要单线程访问,请使用锁定。对此有一个异步等效项:AsyncLock(或AsyncSemaphore)。

不需要像队列或数据流这样的复杂构造。 (AsyncSemaphore有一个这样的队列,但这对你没关系。)