Introducción al Almacenamiento en cola de Azure mediante .NETGet started with Azure Queue storage using .NET

Sugerencia

Extraer del repositorio ejemplos de código de Azure StorageCheck out the Azure Storage code samples repository

Para encontrar ejemplos de código de Azure Storage de un extremo a otro y fáciles de usar que se pueden descargar y ejecutar, consulte nuestra lista de ejemplos de Azure Storage.For easy-to-use end-to-end Azure Storage code samples that you can download and run, please check out our list of Azure Storage Samples.

Información generalOverview

El almacenamiento en cola de Azure proporciona mensajería en la nube entre componentes de aplicaciones.Azure Queue storage provides cloud messaging between application components. A la hora de diseñar aplicaciones para escala, los componentes de las mismas suelen desacoplarse para poder escalarlos de forma independiente.In designing applications for scale, application components are often decoupled, so that they can scale independently. El almacenamiento en cola ofrece mensajería asincrónica para la comunicación entre los componentes de las aplicaciones, independientemente de si se ejecutan en la nube, en el escritorio, en un servidor local o en un dispositivo móvil.Queue storage delivers asynchronous messaging for communication between application components, whether they are running in the cloud, on the desktop, on an on-premises server, or on a mobile device. Además, este tipo de almacenamiento admite la administración de tareas asincrónicas y la creación de flujos de trabajo de procesos.Queue storage also supports managing asynchronous tasks and building process work flows.

Acerca de este tutorialAbout this tutorial

Este tutorial muestra cómo escribir código .NET para algunos escenarios comunes con el Almacenamiento en cola de Azure.This tutorial shows how to write .NET code for some common scenarios using Azure Queue storage. Entre los escenarios descritos se incluyen los siguientes: creación y eliminación de colas y adición, lectura y eliminación de mensajes de la cola.Scenarios covered include creating and deleting queues and adding, reading, and deleting queue messages.

Tiempo estimado para completar: 45 minutosEstimated time to complete: 45 minutes

Requisitos previos:Prerequisities:

¿Qué es Queue Storage?What is Queue Storage?

El almacenamiento en cola de Azure es un servicio para almacenar grandes cantidades de mensajes a los que puede obtenerse acceso desde cualquier lugar del mundo a través de llamadas autenticadas con HTTP o HTTPS.Azure Queue storage is a service for storing large numbers of messages that can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. Un único mensaje en cola puede tener un tamaño de hasta 64 KB y una cola puede contener millones de mensajes, hasta el límite de capacidad total de una cuenta de almacenamiento.A single queue message can be up to 64 KB in size, and a queue can contain millions of messages, up to the total capacity limit of a storage account.

El almacenamiento en cola suele usarse para realizar las siguientes tareas:Common uses of Queue storage include:

  • Creación de trabajo pendiente para el procesamiento asincrónicoCreating a backlog of work to process asynchronously
  • Transferencia de mensajes de un rol web de Azure a un rol de trabajo de AzurePassing messages from an Azure web role to an Azure worker role

Conceptos del servicio ColaQueue Service Concepts

El servicio Cola contiene los siguientes componentes:The Queue service contains the following components:

Cola1

  • Formato URL: las colas son direccionables mediante el formato de dirección URL siguiente:URL format: Queues are addressable using the following URL format:
    http://<storage account>.queue.core.windows.net/<queue>http://<storage account>.queue.core.windows.net/<queue>

    La siguiente dirección URL dirige a una cola del diagrama:The following URL addresses a queue in the diagram:

    http://myaccount.queue.core.windows.net/images-to-download

  • Cuenta de almacenamiento: todo el acceso a Azure Storage se realiza a través de una cuenta de almacenamiento.Storage Account: All access to Azure Storage is done through a storage account. Consulte Objetivos de escalabilidad y rendimiento de Azure Storage para obtener información sobre la capacidad de la cuenta de almacenamiento.See Azure Storage Scalability and Performance Targets for details about storage account capacity.

  • Cola: una cola contiene un conjunto de mensajes.Queue: A queue contains a set of messages. Todos los mensajes deben encontrarse en una cola.All messages must be in a queue. Tenga en cuenta que el nombre de la cola debe ir en minúsculas.Note that the queue name must be all lowercase. Para más información, consulte Asignar nombres a colas y metadatos.For information on naming queues, see Naming Queues and Metadata.
  • Mensaje: un mensaje, en cualquier formato, de hasta 64 KB.Message: A message, in any format, of up to 64 KB. El tiempo máximo que un mensaje puede permanecer en la cola es de 7 días.The maximum time that a message can remain in the queue is 7 days.

Creación de una cuenta de Azure StorageCreate an Azure storage account

La forma más fácil de crear la primera cuenta de Azure Storage es a través de Azure Portal.The easiest way to create your first Azure storage account is by using the Azure portal. Para obtener más información, consulte Crear una cuenta de almacenamiento.To learn more, see Create a storage account.

Puede crear también una cuenta de Azure Storage mediante Azure PowerShell, la CLI de Azure o el proveedor de recursos de Azure Storage para .NET.You can also create an Azure storage account by using Azure PowerShell, Azure CLI, or the Azure Storage Resource Provider for .NET.

Si no desea crear una cuenta de almacenamiento en este momento, también puede utilizar el emulador de Almacenamiento de Azure para ejecutar y probar el código en un entorno local.If you prefer not to create a storage account at this time, you can also use the Azure storage emulator to run and test your code in a local environment. Para más información, consulte Uso del emulador de Azure Storage para desarrollo y pruebas.For more information, see Use the Azure Storage Emulator for Development and Testing.

Configuración de su entorno de desarrolloSet up your development environment

A continuación, configure el entorno de desarrollo en Visual Studio para poder probar los ejemplos de código de esta guía.Next, set up your development environment in Visual Studio so you're ready to try the code examples in this guide.

Creación de un proyecto de aplicación de consola de WindowsCreate a Windows console application project

En Visual Studio, cree una nueva aplicación de consola de Windows.In Visual Studio, create a new Windows console application. Los siguientes pasos muestran cómo crear una aplicación de consola en Visual Studio 2017.The following steps show you how to create a console application in Visual Studio 2017. Los pasos son similares en otras versiones de Visual Studio.The steps are similar in other versions of Visual Studio.

  1. Seleccione Archivo > Nuevo > Proyecto.Select File > New > Project.
  2. Seleccione Instalado > Plantillas > Visual C# > Escritorio clásico de Windows.Select Installed > Templates > Visual C# > Windows Classic Desktop.
  3. Seleccione Aplicación de consola (.NET Framework).Select Console App (.NET Framework).
  4. Escriba el nombre de la aplicación en el campo Nombre.In the Name field, enter a name for your application.
  5. Seleccione Aceptar.Select OK.

Captura de pantalla del cuadro de diálogo Nuevo proyecto de Visual Studio

Todos los ejemplos de código de este tutorial se pueden agregar al método Main() del archivo Program.cs de la aplicación de consola.All code examples in this tutorial can be added to the Main() method of your console application's Program.cs file.

La biblioteca del cliente de Azure Storage se puede usar en cualquier tipo de aplicación. NET, incluidos cualquier servicio en la nube o aplicación web de Azure, y aplicaciones de escritorio o móviles.You can use the Azure Storage Client Library in any type of .NET application, including an Azure cloud service or web app, and desktop and mobile applications. En esta guía, usamos una aplicación de consola para hacerlo más sencillo.In this guide, we use a console application for simplicity.

Uso de NuGet para instalar los paquetes necesariosUse NuGet to install the required packages

Para completar este tutorial, es preciso que haga referencia a dos paquetes en el proyecto:There are two packages you need to reference in your project to complete this tutorial:

Puede usar NuGet para obtener ambos paquetes.You can use NuGet to obtain both packages. Siga estos pasos:Follow these steps:

  1. Haga clic con el botón derecho en el proyecto, en el Explorador de soluciones, y elija Administrar paquetes NuGet.Right-click your project in Solution Explorer, and choose Manage NuGet Packages.
  2. Busque "WindowsAzure.Storage" en línea y seleccione Instalar para instalar la biblioteca cliente de Storage y sus dependencias.Search online for "WindowsAzure.Storage", and select Install to install the Storage Client Library and its dependencies.
  3. Busque "WindowsAzure.ConfigurationManager" en línea y seleccione Instalar para instalar Azure Configuration Manager.Search online for "WindowsAzure.ConfigurationManager", and select Install to install the Azure Configuration Manager.

Nota

El paquete de la biblioteca del cliente de almacenamiento también se incluye en el SDK de Azure para .NET.The Storage Client Library package is also included in the Azure SDK for .NET. Sin embargo, se recomienda que instale también la biblioteca del cliente de almacenamiento desde NuGet para garantizar que siempre dispone de la versión más reciente.However, we recommend that you also install the Storage Client Library from NuGet to ensure that you always have the latest version of the client library.

Las dependencias de ODataLib en la Biblioteca del cliente de Storage para .NET las resuelven los paquetes de ODataLib disponibles en NuGet, no desde WCF Data Services.The ODataLib dependencies in the Storage Client Library for .NET are resolved by the ODataLib packages available on NuGet, not from WCF Data Services. A través de NuGet, es posible descargar directamente las bibliotecas ODataLib o bien hacer referencia a ellas con el código del proyecto.The ODataLib libraries can be downloaded directly, or referenced by your code project through NuGet. Los paquetes ODataLib específicos utilizados por la biblioteca de cliente de almacenamiento son OData, Edm y Spatial.The specific ODataLib packages used by the Storage Client Library are OData, Edm, and Spatial. Aunque las clases de Azure Table Storage usan estas bibliotecas, son dependencias necesarias para programar con la biblioteca de cliente de almacenamiento.While these libraries are used by the Azure Table storage classes, they are required dependencies for programming with the Storage Client Library.

Determine su entorno de destinoDetermine your target environment

Tiene dos opciones de entorno para ejecutar los ejemplos de esta guía:You have two environment options for running the examples in this guide:

  • Puede ejecutar el código en una cuenta de Azure Storage en la nube.You can run your code against an Azure Storage account in the cloud.
  • Puede ejecutar el código en el emulador de almacenamiento de Azure.You can run your code against the Azure storage emulator. El emulador de almacenamiento es un entorno local que emula una cuenta de Azure Storage en la nube.The storage emulator is a local environment that emulates an Azure Storage account in the cloud. El emulador es una opción gratis para probar y depurar el código mientras la aplicación está en desarrollo.The emulator is a free option for testing and debugging your code while your application is under development. El emulador usa una cuenta y una clave conocidas.The emulator uses a well-known account and key. Para más información, consulte Uso del emulador de Azure Storage para desarrollo y pruebas.For more information, see Use the Azure storage emulator for development and testing.

Si el destino es una cuenta de Storage en la nube, copie la clave de acceso principal de su cuenta de Storage de Azure Portal.If you are targeting a storage account in the cloud, copy the primary access key for your storage account from the Azure portal. Para más información, consulte Claves de acceso.For more information, see Access keys.

Nota

Puede dirigirse al emulador de almacenamiento para evitar incurrir en cualquier coste asociado con Azure Storage.You can target the storage emulator to avoid incurring any costs associated with Azure Storage. Sin embargo, si selecciona dirigirse a una cuenta de almacenamiento de Azure en la nube, los costes derivados de la realización de este tutorial serán insignificantes.However, if you do choose to target an Azure storage account in the cloud, costs for performing this tutorial will be negligible.

Configuración de la cadena de conexión de almacenamiento.Configure your storage connection string

La biblioteca del cliente de Azure Storage para .NET admite el uso de una cadena de conexión de almacenamiento para configurar extremos y credenciales a fin de obtener acceso a los servicios de almacenamiento.The Azure Storage Client Library for .NET supports using a storage connection string to configure endpoints and credentials for accessing storage services. La mejor manera de conservar la cadena de conexión de almacenamiento es mediante un archivo de configuración.The best way to maintain your storage connection string is in a configuration file.

Para más información acerca de las cadenas de conexión, consulte Configuración de una cadena de conexión a Azure Storage.For more information about connection strings, see Configure a connection string to Azure Storage.

Nota

La clave de la cuenta de almacenamiento es similar a la contraseña raíz de la cuenta de almacenamiento.Your storage account key is similar to the root password for your storage account. Siempre debe proteger la clave de la cuenta de almacenamiento.Always be careful to protect your storage account key. Evite distribuirla a otros usuarios, codificarla de forma rígida o guardarla en un archivo de texto que sea accesible a otros usuarios.Avoid distributing it to other users, hard-coding it, or saving it in a plain-text file that is accessible to others. Vuelva a generar la clave mediante Azure Portal si cree que puede verse comprometida.Regenerate your key by using the Azure portal if you believe it may have been compromised.

Para configurar la cadena de conexión, abra el archivo app.config en el Explorador de soluciones de Visual Studio.To configure your connection string, open the app.config file from Solution Explorer in Visual Studio. Agregue el contenido del elemento <appSettings> , que se muestra a continuación.Add the contents of the <appSettings> element shown below. Reemplace account-name por el nombre de su cuenta de almacenamiento, y account-key por la clave de acceso de su cuenta:Replace account-name with the name of your storage account, and account-key with your account access key:

<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <appSettings>
        <add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=account-name;AccountKey=account-key" />
    </appSettings>
</configuration>

Por ejemplo, el valor de configuración es similar a:For example, your configuration setting appears similar to:

<add key="StorageConnectionString" value="DefaultEndpointsProtocol=https;AccountName=storagesample;AccountKey=GMuzNHjlB3S9itqZJHHCnRkrokLkcSyW7yK9BRbGp0ENePunLPwBgpxV1Z/pVo9zpem/2xSHXkMqTHHLcx8XRA==" />

Para elegir como destino el emulador de almacenamiento, puede utilizar un acceso directo que se asigna al nombre y la clave conocidas de la cuenta. En ese caso, la configuración de la cadena de conexión es:In that case, your connection string setting is:

<add key="StorageConnectionString" value="UseDevelopmentStorage=true;" />

Adición de directivas usingAdd using directives

Agregue las siguientes directivas using al principio del archivo Program.cs:Add the following using directives to the top of the Program.cs file:

using Microsoft.Azure; // Namespace for CloudConfigurationManager
using Microsoft.WindowsAzure.Storage; // Namespace for CloudStorageAccount
using Microsoft.WindowsAzure.Storage.Queue; // Namespace for Queue storage types

Copia de las credenciales desde Azure PortalCopy your credentials from the Azure portal

El código de ejemplo debe autorizar el acceso a su cuenta de almacenamiento.The sample code needs to authorize access to your storage account. Para realizar la autorización, proporcionará a la aplicación sus credenciales de cuenta de almacenamiento en forma de cadena de conexión.To authorize, you provide the application with your storage account credentials in the form of a connection string. Para ver las credenciales de la cuenta de almacenamiento:To view your storage account credentials:

  1. Acceda a Azure Portal.Navigate to the Azure portal.
  2. Busque su cuenta de almacenamiento.Locate your storage account.
  3. En la sección Configuración de la información general de la cuenta de almacenamiento, seleccione Claves de acceso.In the Settings section of the storage account overview, select Access keys. Aparecen las claves de acceso de la cuenta, así como la cadena de conexión completa de cada clave.Your account access keys appear, as well as the complete connection string for each key.
  4. Busque el valor de Cadena de conexión en key1y haga clic en el botón Copiar para copiar la cadena de conexión.Find the Connection string value under key1, and click the Copy button to copy the connection string. En el paso siguiente, agregará el valor de la cadena de conexión a una variable de entorno.You will add the connection string value to an environment variable in the next step.

    Captura de pantalla que muestra cómo copiar una cadena de conexión desde Azure Portal

Análisis de la cadena de conexiónParse the connection string

La biblioteca del Administrador de configuración de Microsoft Azure para .NET proporciona una clase para analizar una cadena de conexión desde un archivo de configuración.The Microsoft Azure Configuration Manager Library for .NET provides a class for parsing a connection string from a configuration file. La clase CloudConfigurationManager analiza las opciones de configuración con independencia de si la aplicación cliente se ejecuta en el equipo de escritorio, en un dispositivo móvil, en una máquina virtual de Azure o en un servicio en la nube de Azure.The CloudConfigurationManager class parses configuration settings regardless of whether the client application is running on the desktop, on a mobile device, in an Azure virtual machine, or in an Azure cloud service.

Para hacer referencia al paquete CloudConfigurationManager, agregue la siguiente directiva using:To reference the CloudConfigurationManager package, add the following using directive:

using Microsoft.Azure; //Namespace for CloudConfigurationManager

Este es un ejemplo que muestra cómo recuperar una cadena de conexión de un archivo de configuración:Here's an example that shows how to retrieve a connection string from a configuration file:

// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

El uso del Administrador de configuración de Azure es opcional.Using the Azure Configuration Manager is optional. También se puede usar una API, como la clase ConfigurationManager de .NET Framework.You can also use an API like the .NET Framework's ConfigurationManager class.

Creación del cliente del servicio ColaCreate the Queue service client

La clase CloudQueueClient le permite recuperar las colas almacenadas en Almacenamiento en cola.The CloudQueueClient class enables you to retrieve queues stored in Queue storage. Esta es una forma de crear el cliente de servicio:Here's one way to create the service client:

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

Ahora ya puede escribir código que lee y escribe datos en el Almacenamiento en cola.Now you are ready to write code that reads data from and writes data to Queue storage.

Creación de una colaCreate a queue

En este ejemplo se muestra cómo crear una cola si todavía no existe:This example shows how to create a queue if it does not already exist:

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a container.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Create the queue if it doesn't already exist
queue.CreateIfNotExists();

un mensaje en una colaInsert a message into a queue

Para insertar un mensaje en una cola existente, cree en primer lugar un nuevo CloudQueueMessage.To insert a message into an existing queue, first create a new CloudQueueMessage. A continuación, llame al método AddMessage .Next, call the AddMessage method. Se puede crear un valor de CloudQueueMessage a partir de una cadena (en formato UTF-8) o de una matriz de bytes.A CloudQueueMessage can be created from either a string (in UTF-8 format) or a byte array. A continuación se muestra el código con el que se crea una cola (si no existe) y se inserta el mensaje "Hola, mundo":Here is code which creates a queue (if it doesn't exist) and inserts the message 'Hello, World':

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Create the queue if it doesn't already exist.
queue.CreateIfNotExists();

// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.AddMessage(message);

siguiente mensajePeek at the next message

Puede inspeccionar el mensaje situado en la parte delantera de una cola, sin quitarlo de la cola, mediante una llamada al método PeekMessage .You can peek at the message in the front of a queue without removing it from the queue by calling the PeekMessage method.

// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Peek at the next message
CloudQueueMessage peekedMessage = queue.PeekMessage();

// Display message.
Console.WriteLine(peekedMessage.AsString);

contenido de un mensaje en colaChange the contents of a queued message

Puede cambiar el contenido de un mensaje local en la cola.You can change the contents of a message in-place in the queue. Si el mensaje representa una tarea de trabajo, puede usar esta característica para actualizar el estado de la tarea de trabajo.If the message represents a work task, you could use this feature to update the status of the work task. El siguiente código actualiza el mensaje de la cola con contenido nuevo y amplía el tiempo de espera de la visibilidad en 60 segundos más.The following code updates the queue message with new contents, and sets the visibility timeout to extend another 60 seconds. De este modo, se guarda el estado de trabajo asociado al mensaje y se le proporciona al cliente un minuto más para que siga elaborando el mensaje.This saves the state of work associated with the message, and gives the client another minute to continue working on the message. Esta técnica se puede utilizar para realizar un seguimiento de los flujos de trabajo de varios pasos en los mensajes en cola, sin que sea necesario volver a empezar desde el principio si se produce un error en un paso del proceso a causa de un error de hardware o software.You could use this technique to track multi-step workflows on queue messages, without having to start over from the beginning if a processing step fails due to hardware or software failure. Normalmente, también mantendría un número de reintentos y, si el mensaje se intentara más de n veces, lo eliminaría.Typically, you would keep a retry count as well, and if the message is retried more than n times, you would delete it. Esto proporciona protección frente a un mensaje que produce un error en la aplicación cada vez que se procesa.This protects against a message that triggers an application error each time it is processed.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Get the message from the queue and update the message contents.
CloudQueueMessage message = queue.GetMessage();
message.SetMessageContent("Updated contents.");
queue.UpdateMessage(message,
    TimeSpan.FromSeconds(60.0),  // Make it invisible for another 60 seconds.
    MessageUpdateFields.Content | MessageUpdateFields.Visibility);

siguiente mensaje de la colaDe-queue the next message

El código quita un mensaje de una cola en dos pasos.Your code de-queues a message from a queue in two steps. Si llama a GetMessage, obtiene el siguiente mensaje en una cola.When you call GetMessage, you get the next message in a queue. Un mensaje devuelto por GetMessage se hace invisible a cualquier otro código de lectura de mensajes de esta cola.A message returned from GetMessage becomes invisible to any other code reading messages from this queue. De forma predeterminada, este mensaje permanece invisible durante 30 segundos.By default, this message stays invisible for 30 seconds. Para acabar de quitar el mensaje de la cola, también debe llamar a DeleteMessage.To finish removing the message from the queue, you must also call DeleteMessage. Este proceso de extracción de un mensaje que consta de dos pasos garantiza que si su código no puede procesar un mensaje a causa de un error de hardware o software, otra instancia de su código puede obtener el mismo mensaje e intentarlo de nuevo.This two-step process of removing a message assures that if your code fails to process a message due to hardware or software failure, another instance of your code can get the same message and try again. El código llama a DeleteMessage justo después de que se haya procesado el mensaje.Your code calls DeleteMessage right after the message has been processed.

// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Get the next message
CloudQueueMessage retrievedMessage = queue.GetMessage();

//Process the message in less than 30 seconds, and then delete the message
queue.DeleteMessage(retrievedMessage);

Uso del patrón Async-Await con API comunes de almacenamiento de colasUse Async-Await pattern with common Queue storage APIs

En este ejemplo se muestra cómo usar el patrón Async-Await con API comunes de almacenamiento de colas.This example shows how to use the Async-Await pattern with common Queue storage APIs. El ejemplo llama a la versión asincrónica de cada uno de los métodos indicados, tal como se puede ver por el sufijo Async de cada método.The sample calls the asynchronous version of each of the given methods, as indicated by the Async suffix of each method. Cuando se utiliza un método asincrónico, el patrón Async-Await suspende la ejecución local hasta que se completa la llamada.When an async method is used, the async-await pattern suspends local execution until the call completes. Este comportamiento permite que el subproceso actual realice otro trabajo, lo que ayuda a evitar cuellos de botella en el rendimiento y mejora la capacidad de respuesta general de la aplicación.This behavior allows the current thread to do other work, which helps avoid performance bottlenecks and improves the overall responsiveness of your application. Para más información sobre el uso del patrón Async-Await en. NET, consulte Async y Await (C# y Visual Basic).For more details on using the Async-Await pattern in .NET see Async and Await (C# and Visual Basic)

// Create the queue if it doesn't already exist
if(await queue.CreateIfNotExistsAsync())
{
    Console.WriteLine("Queue '{0}' Created", queue.Name);
}
else
{
    Console.WriteLine("Queue '{0}' Exists", queue.Name);
}

// Create a message to put in the queue
CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message");

// Async enqueue the message
await queue.AddMessageAsync(cloudQueueMessage);
Console.WriteLine("Message added");

// Async dequeue the message
CloudQueueMessage retrievedMessage = await queue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);

// Async delete the message
await queue.DeleteMessageAsync(retrievedMessage);
Console.WriteLine("Deleted message");

Uso de opciones adicionales para quitar mensajes de la colaLeverage additional options for de-queuing messages

Hay dos formas de personalizar la recuperación de mensajes de una cola.There are two ways you can customize message retrieval from a queue. En primer lugar, puede obtener un lote de mensajes (hasta 32).First, you can get a batch of messages (up to 32). En segundo lugar, puede establecer un tiempo de espera de la invisibilidad más largo o más corto para que el código disponga de más o menos tiempo para procesar cada mensaje.Second, you can set a longer or shorter invisibility timeout, allowing your code more or less time to fully process each message. El siguiente ejemplo de código utiliza el método GetMessages para obtener 20 mensajes en una llamada.The following code example uses the GetMessages method to get 20 messages in one call. A continuación, procesa cada mensaje con un bucle foreach .Then it processes each message using a foreach loop. También establece el tiempo de espera de la invisibilidad en cinco minutos para cada mensaje.It also sets the invisibility timeout to five minutes for each message. Tenga en cuenta que los 5 minutos empiezan a contar para todos los mensajes al mismo tiempo, por lo que después de pasar los 5 minutos desde la llamada a GetMessages, todos los mensajes que no se han eliminado volverán a estar visibles.Note that the 5 minutes starts for all messages at the same time, so after 5 minutes have passed since the call to GetMessages, any messages which have not been deleted will become visible again.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

foreach (CloudQueueMessage message in queue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
    // Process all messages in less than 5 minutes, deleting each message after processing.
    queue.DeleteMessage(message);
}

la longitud de la colaGet the queue length

Puede obtener una estimación del número de mensajes existentes en una cola.You can get an estimate of the number of messages in a queue. El método FetchAttributes solicita al servicio de cola la recuperación de los atributos de la cola, incluido el número de mensajes.The FetchAttributes method asks the Queue service to retrieve the queue attributes, including the message count. La propiedad ApproximateMessageCount devuelve el último valor recuperado por el método FetchAttributes, sin llamar a Queue service.The ApproximateMessageCount property returns the last value retrieved by the FetchAttributes method, without calling the Queue service.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Fetch the queue attributes.
queue.FetchAttributes();

// Retrieve the cached approximate message count.
int? cachedMessageCount = queue.ApproximateMessageCount;

// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);

Eliminación de una colaDelete a queue

Para eliminar una cola y todos los mensajes contenidos en ella, llame al método Delete en el objeto de cola.To delete a queue and all the messages contained in it, call the Delete method on the queue object.

// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();

// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");

// Delete the queue.
queue.Delete();

Pasos siguientesNext steps

Ahora que está familiarizado con los aspectos básicos del almacenamiento de colas, utilice estos vínculos para obtener más información acerca de tareas de almacenamiento más complejas.Now that you've learned the basics of Queue storage, follow these links to learn about more complex storage tasks.