AYUDA .NET

C# Wait For Seconds (Cómo funciona para desarrolladores)

Actualizado agosto 15, a. m.
Compartir:

En programación, a veces querrás pausar o retrasar la ejecución de tu código durante cierto tiempo. Esto es para que pueda simular diferentes condiciones de tiempo, para dar prioridad a ciertas tareas, para ejecutar otras tareas sin bloquear el hilo principal, y mucho más.

En esta guía, explicaremos cómo esperar en C#, incluidos los métodos asíncronos, el comando sleep, la función sleep y las aplicaciones de consola, y cómo incluir una función wait en nuestra herramienta de generación de PDF líder del sector, IronPDF.

Cómo Esperar Tarea en C#

La orden de dormir

sleep" es un comando sencillo pero potente que permite pausar la ejecución de la tarea actual durante un periodo de tiempo determinado, indicando al programa que espere antes de pasar a la siguiente tarea. En C#, lo hacemos utilizando Thread.Sleep(int milisegundos) como en el siguiente ejemplo de código:

using System;
using System.Threading;
class Program
{
    public static void Main()
    {
        Console.WriteLine("Starting the program...");
        Thread.Sleep(3000); // Sleep for 3 seconds
        Console.WriteLine("...Program continues after 3 seconds");
    }
}
using System;
using System.Threading;
class Program
{
    public static void Main()
    {
        Console.WriteLine("Starting the program...");
        Thread.Sleep(3000); // Sleep for 3 seconds
        Console.WriteLine("...Program continues after 3 seconds");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Aquí, el programa comienza imprimiendo "Starting the program..." en la consola antes de utilizar el método Thread.Sleep para hacer una pausa de 3.000 milisegundos (o tres segundos). Tras el retardo especificado, el programa se reanuda e imprime la salida "...El programa continúa después de 3 segundos" en la consola.

Método asíncrono y tareas

Los métodos asíncronos en C# le permiten ejecutar múltiples tareas simultáneamente sin interferir con el hilo principal. Esto significa que mientras una tarea espera, otras pueden seguir ejecutándose. Para implementar un método async, necesitarás utilizar la palabra clave async y la clase Task.

using System;
using System.Threading.Tasks;
class Program
{
   public static async Task Main()
   {
       Console.WriteLine("Starting Task 1...");
       var task1 = DoSomethingAsync(3000);
       Console.WriteLine("Starting Task 2...");
       var task2 = DoSomethingAsync(2000);
       await Task.WhenAll(task1, task2);
       Console.WriteLine("Both tasks completed.");
   }
   private static async Task DoSomethingAsync(int milliseconds)
   {
       await Task.Delay(milliseconds);
       Console.WriteLine($"Task completed after {milliseconds} milliseconds");
   }
}
using System;
using System.Threading.Tasks;
class Program
{
   public static async Task Main()
   {
       Console.WriteLine("Starting Task 1...");
       var task1 = DoSomethingAsync(3000);
       Console.WriteLine("Starting Task 2...");
       var task2 = DoSomethingAsync(2000);
       await Task.WhenAll(task1, task2);
       Console.WriteLine("Both tasks completed.");
   }
   private static async Task DoSomethingAsync(int milliseconds)
   {
       await Task.Delay(milliseconds);
       Console.WriteLine($"Task completed after {milliseconds} milliseconds");
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En este ejemplo de código, tenemos dos tareas ejecutándose al mismo tiempo. El método DoSomethingAsync toma un parámetro int que representa el tiempo en milisegundos que la tarea debe retrasarse (como se puede ver en el '3000' y '2000' en el código, tanto un valor de tiempo de espera). El método Task.Delay es similar al método Thread.Sleep() pero funciona con tareas asíncronas y no bloquea el hilo principal.

Utilizar temporizadores para programar las tareas

Los temporizadores en C# le permiten ejecutar una tarea específica después de un intervalo especificado. Puedes crear un temporizador utilizando la clase System.Timers.Timer. He aquí un ejemplo de cómo utilizar un temporizador en una aplicación de consola:

using System;
using System.Timers;
class Program
{
   public static void Main()
   {
       var timer = new Timer(1000); // Create a timer with a 1-second interval
       timer.Elapsed += OnTimerElapsed;
       timer.AutoReset = true;
       timer.Enabled = true;

       Console.WriteLine("Press any key to exit...");
       Console.ReadKey();
   }
   private static void OnTimerElapsed(object sender, ElapsedEventArgs e)
   {
       Console.WriteLine("Timer ticked at " + e.SignalTime);
   }
}
using System;
using System.Timers;
class Program
{
   public static void Main()
   {
       var timer = new Timer(1000); // Create a timer with a 1-second interval
       timer.Elapsed += OnTimerElapsed;
       timer.AutoReset = true;
       timer.Enabled = true;

       Console.WriteLine("Press any key to exit...");
       Console.ReadKey();
   }
   private static void OnTimerElapsed(object sender, ElapsedEventArgs e)
   {
       Console.WriteLine("Timer ticked at " + e.SignalTime);
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En el ejemplo anterior, creamos un temporizador con un intervalo de 1 segundo. El método OnTimerElapsed se ejecuta cada vez que el temporizador hace tictac. Establecemos la propiedad AutoReset a true para que el temporizador se reinicie automáticamente después de cada tick. La propiedad Enabled se establece en true para iniciar el temporizador.

Cuando ejecutes esta aplicación de consola, verás que el temporizador hace tictac cada segundo, imprimiendo el tiempo de tictac en la consola. El programa seguirá ejecutándose hasta que pulse cualquier tecla para salir.

Creación de funciones de espera personalizadas

A veces, es posible que necesite una función de espera personalizada para satisfacer requisitos específicos de su código. Por ejemplo, es posible que desee crear una función de espera que sólo bloquee la tarea actual, en lugar de todo el hilo. Puedes conseguirlo utilizando delegados asíncronos.

He aquí un ejemplo de función de espera personalizada:

using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
   public static async Task Main()
   {
       Console.WriteLine("Starting Task 1...");
       await CustomWaitAsync(3000);
       Console.WriteLine("Task 1 completed.");

       Console.WriteLine("Starting Task 2...");
       await CustomWaitAsync(2000);
       Console.WriteLine("Task 2 completed.");
   }
   private static async Task CustomWaitAsync(int milliseconds)
   {
       await Task.Run(() => Thread.Sleep(milliseconds));
   }
}
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
   public static async Task Main()
   {
       Console.WriteLine("Starting Task 1...");
       await CustomWaitAsync(3000);
       Console.WriteLine("Task 1 completed.");

       Console.WriteLine("Starting Task 2...");
       await CustomWaitAsync(2000);
       Console.WriteLine("Task 2 completed.");
   }
   private static async Task CustomWaitAsync(int milliseconds)
   {
       await Task.Run(() => Thread.Sleep(milliseconds));
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Aquí, el método CustomWaitAsync acepta un parámetro int que representa el tiempo de retardo en milisegundos. El método utiliza un delegado asíncrono para ejecutar la función Thread.Sleep dentro de una nueva tarea, asegurando que el estado actual de la tarea se bloquea mientras espera, pero no el hilo principal.

Elegir la estrategia de espera adecuada

Ahora que hemos cubierto la sentencia wait de C#, el comando sleep, los métodos async, los temporizadores y las funciones wait personalizadas, es esencial saber cuándo usar cada técnica. He aquí un breve resumen

  • Utiliza la función Thread.Sleep cuando necesites una forma sencilla de pausar la ejecución de tu código durante un tiempo determinado
  • Utilice métodos y tareas asíncronos cuando necesite ejecutar varias tareas simultáneamente sin bloquear el subproceso principal
  • Utilice temporizadores cuando necesite ejecutar una tarea específica en un intervalo determinado
  • Cree funciones de espera personalizadas cuando tenga requisitos específicos que no se cumplan con los métodos incorporados

Generación de PDF con IronPDF mediante la función Wait

IronPDF es una ligera biblioteca PDF .NET diseñada específicamente pensando en los desarrolladores web. Hace que leer, escribir y manipular archivos PDF sea pan comido, ya que es capaz de convertir todo tipo de archivos en contenido PDF, y puede utilizarlo en sus proyectos .NET tanto para escritorio como para web. Y lo mejor es que se puede probar gratis en un entorno de desarrollo. Vamos a sumergirnos.

IronPDF funciona con archivos HTML, URL, cadenas sin procesar y archivos ZIP. He aquí un breve resumen del código:

using IronPdf;
class Program
{
   static void Main(string [] args)
   {
       var renderer = new ChromePdfRenderer();
       // 1. Convert HTML String to PDF
       var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
       var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
       pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
       // 2. Convert HTML File to PDF
       var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
       var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
       pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
       // 3. Convert URL to PDF
       var url = "http://ironpdf.com"; // Specify the URL
       var pdfFromUrl = renderer.RenderUrlAsPdf(url);
       pdfFromUrl.SaveAs("URLToPDF.pdf");
   }
}
using IronPdf;
class Program
{
   static void Main(string [] args)
   {
       var renderer = new ChromePdfRenderer();
       // 1. Convert HTML String to PDF
       var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
       var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
       pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
       // 2. Convert HTML File to PDF
       var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
       var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
       pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
       // 3. Convert URL to PDF
       var url = "http://ironpdf.com"; // Specify the URL
       var pdfFromUrl = renderer.RenderUrlAsPdf(url);
       pdfFromUrl.SaveAs("URLToPDF.pdf");
   }
}
Imports IronPdf
Friend Class Program
   Shared Sub Main(ByVal args() As String)
	   Dim renderer = New ChromePdfRenderer()
	   ' 1. Convert HTML String to PDF
	   Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
	   Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
	   pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
	   ' 2. Convert HTML File to PDF
	   Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
	   Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
	   pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
	   ' 3. Convert URL to PDF
	   Dim url = "http://ironpdf.com" ' Specify the URL
	   Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
	   pdfFromUrl.SaveAs("URLToPDF.pdf")
   End Sub
End Class
VB   C#

IronPDF puede integrarse perfectamente con sus estrategias de espera para generar documentos PDF después de ejecutar tareas, durante intervalos programados o cuando el subproceso actual reanuda la ejecución.

Por ejemplo, puede utilizar IronPDF en combinación con un método asíncrono para generar un informe PDF después de obtener datos de una base de datos sin bloquear el subproceso principal. Del mismo modo, puede utilizar una clase de temporizador para crear una instantánea en PDF de los datos de su aplicación a intervalos regulares.

Instalar la biblioteca IronPDF

IronPDF es fácil de usar, pero aún más fácil de instalar. Hay un par de maneras de hacerlo:

Método 1: Consola del gestor de paquetes NuGet

En Visual Studio, en el Explorador de soluciones, haga clic con el botón derecho en Referencias y, a continuación, haga clic en Administrar paquetes NuGet. Pulsa Examinar y busca 'IronPDF, e instala la última versión. Si ves esto, está funcionando:

También puede ir a Tools -> NuGet Package Manager -> Packet Manager Console, e introducir la siguiente línea en la pestaña Package Manager:

Instalar el paquete IronPDF

Por último, puede obtener IronPDF directamente de Sitio web oficial de NuGet. Seleccione la opción Descargar paquete del menú de la derecha de la página, haga doble clic en su descarga para instalarla automáticamente y vuelva a cargar la Solución para empezar a utilizarla en su proyecto.

¿No funcionó? Encontrará ayuda específica para cada plataforma en nuestra página de instalación avanzada de NuGet.

Método 2: Utilizar un archivo DLL

También puede obtener el archivo DLL IronPDF directamente de nosotros y añadirlo a Visual Studio manualmente. Para obtener instrucciones completas y enlaces a los paquetes DLL para Windows, MacOS y Linux, consulte nuestra página dedicada página de instalación.

Cómo utilizar C# Wait en IronPDF

Puede ver cómo incluir una función de espera en IronPDF en el siguiente ejemplo:

using System;
using System.Threading.Tasks;
using System.Diagnostics;
using IronPdf;
class Program
{
   public static async Task Main()
   {
       Console.WriteLine("Starting the PDF generation task...");
   Stopwatch stopwatch = Stopwatch.StartNew();
       await Task.Delay(3000); // Wait for 3 seconds
       GeneratePdf();
       Console.WriteLine("PDF generated successfully.");
   }
   private static void GeneratePdf()
   {
       var htmlToPdf = new ChromePdfRenderer();
       var pdf = htmlToPdf.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
       pdf.SaveAs("HelloWorld.pdf");
   }
}
using System;
using System.Threading.Tasks;
using System.Diagnostics;
using IronPdf;
class Program
{
   public static async Task Main()
   {
       Console.WriteLine("Starting the PDF generation task...");
   Stopwatch stopwatch = Stopwatch.StartNew();
       await Task.Delay(3000); // Wait for 3 seconds
       GeneratePdf();
       Console.WriteLine("PDF generated successfully.");
   }
   private static void GeneratePdf()
   {
       var htmlToPdf = new ChromePdfRenderer();
       var pdf = htmlToPdf.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
       pdf.SaveAs("HelloWorld.pdf");
   }
}
Imports System
Imports System.Threading.Tasks
Imports System.Diagnostics
Imports IronPdf
Friend Class Program
   Public Shared Async Function Main() As Task
	   Console.WriteLine("Starting the PDF generation task...")
   Dim stopwatch As Stopwatch = System.Diagnostics.Stopwatch.StartNew()
	   Await Task.Delay(3000) ' Wait for 3 seconds
	   GeneratePdf()
	   Console.WriteLine("PDF generated successfully.")
   End Function
   Private Shared Sub GeneratePdf()
	   Dim htmlToPdf = New ChromePdfRenderer()
	   Dim pdf = htmlToPdf.RenderHtmlAsPdf("<h1>Hello, World!</h1>")
	   pdf.SaveAs("HelloWorld.pdf")
   End Sub
End Class
VB   C#

Aquí, utilizamos el método Task.Delay para esperar 3 segundos antes de generar un PDF. El PDF se guarda como "HelloWorld.pdf" en el directorio de trabajo de la aplicación al finalizar la espera.

Y aquí está el producto final:

Utilización del método de espera con IronPDF

En las aplicaciones de C#, puede utilizar eficazmente la función de suspensión para gestionar el subproceso actual y el tiempo de CPU mientras realiza operaciones como cargar datos en una DataTable o generar informes PDF utilizando IronPDF.

Conclusión

Puede parecer contraintuitivo al principio, pero implementar sentencias wait en tu código es una habilidad imprescindible a la hora de construir aplicaciones eficientes. Y al incorporar IronPDF, puede llevar sus aplicaciones al siguiente nivel creando documentos PDF sobre la marcha, sin bloquear el hilo principal.

¿Está listo para utilizar IronPDF? Puede empezar con nuestro 30 días de prueba gratuita. Además, su uso para fines de desarrollo es totalmente gratuito, por lo que podrás ver de qué está hecho. Y si le gusta lo que ve, IronPDF le ofrece desde tan sólo $749. Para ahorrar aún más, consulte el Iron Suite donde puede conseguir las nueve herramientas de Iron Software por el precio de dos. Feliz codificación!

< ANTERIOR
Razor C# (Cómo funciona para desarrolladores)
SIGUIENTE >
Bucle For en C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.8 acaba de salir

Descarga gratuita de NuGet Descargas totales: 10,439,034 Ver licencias >