C# 在Azure Web作业中,Azure队列中的项目何时删除?

C# 在Azure Web作业中,Azure队列中的项目何时删除?,c#,azure,azure-servicebus-queues,C#,Azure,Azure Servicebus Queues,我已经使用Azure队列创建了一个触发的web作业。为简洁起见,我的函数如下所示: public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log) { log.WriteLine(message); System.Threading.Thread.Sleep(10000); } while (true) {

我已经使用Azure队列创建了一个触发的web作业。为简洁起见,我的函数如下所示:

    public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log)
    {
        log.WriteLine(message);
        System.Threading.Thread.Sleep(10000);
    }
while (true)
{
    var myMessageId = "98uasd98fusad8";
    CloudQueue queue = queueClient.GetQueueReference("myqueue");
    queue.CreateIfNotExists();
    var maxMessagesToCheck = 99;
    var oldMessages = queue.GetMessages(maxMessagesToCheck, null);
    if (!oldMessages.Any(x => x.AsString == myMessageId))
    {
        CloudQueueMessage message = new CloudQueueMessage(myMessageId);
        queue.AddMessage(message);
    }
}
我有另一个函数,它将项目添加到队列中进行处理。但是,我想检查最后的
xx
消息,以确定队列中是否已经存在项目(具有相同的消息)。大概是这样的:

    public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log)
    {
        log.WriteLine(message);
        System.Threading.Thread.Sleep(10000);
    }
while (true)
{
    var myMessageId = "98uasd98fusad8";
    CloudQueue queue = queueClient.GetQueueReference("myqueue");
    queue.CreateIfNotExists();
    var maxMessagesToCheck = 99;
    var oldMessages = queue.GetMessages(maxMessagesToCheck, null);
    if (!oldMessages.Any(x => x.AsString == myMessageId))
    {
        CloudQueueMessage message = new CloudQueueMessage(myMessageId);
        queue.AddMessage(message);
    }
}
然而,我只是不确定某个项目何时“弹出”队列。处理完成且
ProcessQueueMessage
函数返回(无错误)后,是否弹出?或者,它是在处理开始时弹出的吗

如果在
处理完成后,项目弹出,则我上面的第二个功能将正常工作。但是,如果项目在流程开始时立即弹出,那么我必须找到另一个解决方案

这可能是一种更简洁的提问方式:

    public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log)
    {
        //IS THE ITEM IN THE QUEUE POPPED OFF HERE?
        log.WriteLine(message);
        System.Threading.Thread.Sleep(10000);
    } //OR IS THE ITEM IN THE QUEUE POPPED OFF HERE?

当消息被锁定时,从同一队列或订阅接收的其他客户端可以接受锁定并检索未处于活动锁定下的下一个可用消息。当消息上的锁被显式释放或锁过期时,该消息会在检索订单的前面或附近弹出,以便重新交付


因此,您的解决方案将无法工作,假设您的队列中有10条消息,并且第一条消息当前正由您的第一个函数处理,因此当checking函数运行时,它只能在它之后查看消息,假设它正在批处理中查看消息2、3、4,与第一个函数相同,它需要为这三条消息设置锁,因此当第一个函数完成消息1时,它只能拾取未选中的消息5。

没有时间回答,但在
ProcessQueueMessage
期间它从队列中隐藏,然后在最后弹出。如果引发了异常,它将再次显示以供重试,具体取决于您的设置。感谢您提供的信息。我很感激。