protected override async Task RunAsync(CancellationToken cancellationToken)
{
var queryModelBuilder = GetQueryModelBuilder();
var queue = await StateManager.GetOrAddAsync<IReliableQueue<string>>("queryModelBuilderQueue");
var count = (int)await queue.GetCountAsync();
if(count > 0)
{
_semaphore.Release(count);
}
while(true)
{
cancellationToken.ThrowIfCancellationRequested();
using(ITransaction tx = StateManager.CreateTransaction())
{
ConditionalResult<string> dequeueReply = await queue.TryDequeueAsync(tx);
if(dequeueReply.HasValue)
{
string message = dequeueReply.Value;
await queryModelBuilder.Handle(CqrsApplication.GetService<IDeserializer>().CreateEvent(JObject.Parse(message)));
await tx.CommitAsync();
}
}
await _semaphore.WaitAsync(cancellationToken);
}
}