C# 초 대기 (개발자를 위한 작동 방식)
프로그래밍에서는 코드 실행을 일정 시간 동안 중지하거나 지연시키고 싶을 때가 있습니다. 이렇게 하면 다양한 시간 조건을 시뮬레이션하고 특정 작업을 우선순위로 하거나 메인 스레드를 차단하지 않고 다른 작업을 실행할 수 있습니다.
이 가이드에서는 C#에서 대기하는 방법과 함께 비동기 메서드, 슬립 명령, 슬립 함수, 콘솔 앱 및 업계 선두의 PDF 생성 도구 IronPDF에 대기 기능을 포함시키는 방법을 설명합니다.
C#에서 작업 대기하는 방법
슬립 명령
'슬립(Sleep)'은 현재 작업을 일정 시간 동안 중지할 수 있는 간단하지만 강력한 명령으로, 다음 작업을 진행하기 전에 프로그램이 기다리도록 지시합니다. C#에서는 다음 코드 예제와 같이 Thread.Sleep(int milliseconds) 메서드를 사용하여 이 작업을 수행합니다:
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");
}
}
Imports System
Imports System.Threading
Class Program
Public Shared Sub Main()
Console.WriteLine("Starting the program...")
Thread.Sleep(3000) ' Sleep for 3 seconds
Console.WriteLine("...Program continues after 3 seconds")
End Sub
End Class
여기서 프로그램은 콘솔에 "프로그램 시작 중..."을 출력한 후 Thread.Sleep 메서드를 사용하여 3,000밀리초(또는 3초)를 일시 정지합니다. 지정된 지연 후, 프로그램은 다시 시작되고 '...3초 후 프로그램 계속'이라는 출력을 콘솔에 출력합니다.
비동기 메서드 및 작업
C#의 비동기 메서드는 메인 스레드를 방해하지 않고 여러 작업을 동시에 실행할 수 있습니다. 이는 하나의 작업이 대기하는 동안에도 다른 작업이 계속 실행될 수 있음을 의미합니다. 비동기 메서드를 구현하려면 async 키워드와 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); // Asynchronously wait without blocking the main thread
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); // Asynchronously wait without blocking the main thread
Console.WriteLine($"Task completed after {milliseconds} milliseconds");
}
}
Imports System
Imports System.Threading.Tasks
Friend Class Program
Public Shared Async Function Main() As Task
Console.WriteLine("Starting Task 1...")
Dim task1 = DoSomethingAsync(3000)
Console.WriteLine("Starting Task 2...")
Dim task2 = DoSomethingAsync(2000)
Await Task.WhenAll(task1, task2)
Console.WriteLine("Both tasks completed.")
End Function
Private Shared Async Function DoSomethingAsync(ByVal milliseconds As Integer) As Task
Await Task.Delay(milliseconds) ' Asynchronously wait without blocking the main thread
Console.WriteLine($"Task completed after {milliseconds} milliseconds")
End Function
End Class
이 코드 예제에서는 두 개의 작업이 동시에 실행됩니다. DoSomethingAsync 메서드는 int 매개변수를 사용하는데, 이는 작업이 지연되어야 하는 시간을 밀리초로 나타내며, 코드 내의 3000 및 2000에서 확인할 수 있듯이 두 개의 타임아웃 값입니다. Task.Delay 메서드는 Thread.Sleep() 메서드와 유사하지만 비동기 작업과 함께 작동하며 메인 스레드를 차단하지 않습니다.
타이머를 사용하여 작업 일정하기
C#의 타이머를 사용하면 지정된 간격 후에 특정 작업을 실행할 수 있습니다. System.Timers.Timer 클래스를 사용하여 타이머를 생성할 수 있습니다. 콘솔 앱에서 타이머를 사용하는 예는 다음과 같습니다:
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);
}
}
Imports System
Imports System.Timers
Class Program
Public Shared Sub Main()
Dim timer As New Timer(1000) ' Create a timer with a 1-second interval
AddHandler timer.Elapsed, AddressOf OnTimerElapsed
timer.AutoReset = True
timer.Enabled = True
Console.WriteLine("Press any key to exit...")
Console.ReadKey()
End Sub
Private Shared Sub OnTimerElapsed(sender As Object, e As ElapsedEventArgs)
Console.WriteLine("Timer ticked at " & e.SignalTime)
End Sub
End Class
위의 예에서는 1초 간격으로 타이머를 생성합니다. 타이머가 틱할 때마다 OnTimerElapsed 메서드가 실행됩니다. 타이머가 각 틱 후 자동으로 다시 시작되도록 AutoReset 속성을 true로 설정합니다. 타이머를 시작하기 위해 Enabled 속성을 true로 설정합니다.
이 콘솔 애플리케이션을 실행하면 타이머가 초마다 틱하고 틱 시간을 콘솔에 출력하는 것을 볼 수 있습니다. 프로그램은 종료 키를 누를 때까지 계속 실행됩니다.
사용자 지정 대기 함수 생성하기
때때로 코드의 특정 요구 사항을 충족하기 위해 사용자 정의 대기 함수가 필요할 수 있습니다. 예를 들어, 현재 작업만 차단하고 전체 스레드를 차단하지 않는 대기 함수를 만들고 싶을 수 있습니다. 비동기 대리자를 사용하여 이를 달성할 수 있습니다.
다음은 사용자 지정 대기 함수의 예입니다:
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)); // Run in a separate task to avoid blocking the main thread
}
}
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)); // Run in a separate task to avoid blocking the main thread
}
}
Imports System
Imports System.Threading
Imports System.Threading.Tasks
Friend Class Program
Public Shared Async Function Main() As Task
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.")
End Function
Private Shared Async Function CustomWaitAsync(ByVal milliseconds As Integer) As Task
Await Task.Run(Sub() Thread.Sleep(milliseconds)) ' Run in a separate task to avoid blocking the main thread
End Function
End Class
여기서 CustomWaitAsync 메서드는 지연 시간을 밀리초로 나타내는 int 매개변수를 수락합니다. 메서드는 비동기 대리자를 사용하여 새로운 작업 내에서 Thread.Sleep 함수를 실행하며, 대기 중일 때 현재 작업 상태는 차단되지만 메인 스레드는 차단되지 않도록 보장합니다.
올바른 대기 전략 선택하기
이제 우리가 C# 대기 구문, Sleep 명령어, 비동기 메서드, 타이머 및 사용자 지정 대기 함수에 대해 다뤘으므로 각각의 기술을 언제 사용할지 아는 것이 중요합니다. 간단하게 요약하면 다음과 같습니다:
- 코드 실행을 지정된 시간만큼 일시 중지하는 간단한 방법이 필요할 때
Thread.Sleep함수를 사용하세요. - 메인 스레드를 차단하지 않고 여러 작업을 동시에 실행해야 할 때 비동기 메서드 및 작업을 사용합니다.
- 특정 간격에 특정 작업을 실행해야 할 때 타이머를 사용합니다.
- 내장 메서드로 충족되지 않는 특정 요구 사항이 있을 때 사용자 정의 대기 함수를 생성합니다.
대기 기능을 사용하여 IronPDF로 PDF 생성하기
IronPDF는 웹 개발자를 염두에 두고 설계된 가벼운 .NET PDF 라이브러리입니다. PDF 파일을 읽고, 쓰고, 조작하는 것이 쉽고, 모든 종류의 파일 형식을 PDF 콘텐츠로 변환할 수 있으며, 데스크톱 및 웹 모두에서 .NET 프로젝트에 사용할 수 있습니다. 가장 좋은 점은 개발 환경에서 무료로 사용해 볼 수 있다는 것입니다. 자, 시작해 볼까요?
IronPDF는 HTML 파일, URL, 원시 문자열 및 ZIP 파일과 함께 작동합니다. 코드의 간단한 개요는 다음과 같습니다:
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
IronPDF는 작업 실행 후, 예약된 간격 동안, 또는 현재 스레드가 실행을 재개할 때 PDF 문서를 생성하기 위해 대기 전략과 원활하게 통합될 수 있습니다.
예를 들어, IronPDF를 비동기 메서드와 결합하여 데이터베이스에서 데이터를 가져온 후 메인 스레드를 차단하지 않고 PDF 보고서를 생성할 수 있습니다. 유사하게 타이머 클래스를 사용하여 애플리케이션의 데이터를 정기적으로 PDF 스냅샷으로 생성할 수 있습니다.
IronPDF 라이브러리 설치하기
IronPDF는 사용하기 쉽지만 설치는 더욱 쉽습니다. 다음과 같은 몇 가지 방법이 있습니다:
방법 1: NuGet 패키지 관리자 콘솔
Visual Studio의 솔루션 탐색기에서 참조를 마우스 오른쪽 버튼으로 클릭하고 NuGet 패키지 관리를 클릭합니다. 탐색을 클릭하고 'IronPDF'를 검색하여 최신 버전을 설치합니다. 이것을 보면 작동하는 것입니다:

또한 도구 -> NuGet 패키지 관리자 -> 패키지 관리자 콘솔로 가서 패키지 관리자 탭에 다음 줄을 입력할 수 있습니다:
Install-Package IronPdf
마지막으로 NuGet의 공식 웹사이트에서 IronPDF를 직접 얻을 수 있습니다. 페이지의 오른쪽 메뉴에서 패키지 다운로드 옵션을 선택하고 다운로드를 두 번 클릭하여 자동으로 설치하고 솔루션을 다시 로드하여 프로젝트에서 사용을 시작하십시오.
작동하지 않나요? 우리의 고급 NuGet 설치 페이지에서 플랫폼별 도움말을 찾을 수 있습니다.
방법 2: DLL 파일 사용하기
IronPDF DLL 파일을 직접 저희로부터 받아 Visual Studio에 수동으로 추가할 수도 있습니다. Windows, MacOS, Linux DLL 패키지의 전체 지침 및 링크를 보려면 전용 설치 페이지를 확인하세요.
IronPDF에서 C# Wait 사용 방법
다음 예제에서 IronPDF에 대기 함수를 포함하는 방법을 볼 수 있습니다:
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
여기서 우리는 3초 동안 대기한 후 PDF를 생성하기 위해 Task.Delay 메서드를 사용합니다. PDF는 작업이 완료되면 애플리케이션의 작업 디렉터리에 'HelloWorld.pdf'로 저장됩니다.
그리고 여기 완성품이 있습니다:

IronPDF와 함께 대기 메서드 사용하기
C# 애플리케이션에서는 IronPDF를 사용하여 DataTable에 데이터를 로드하거나 PDF 보고서를 생성하는 등의 작업을 수행할 때 현재 스레드와 CPU 시간을 관리하기 위해 sleep 함수를 효율적으로 사용할 수 있습니다.
결론
처음에는 반직관적으로 보일 수 있지만, 효율적인 애플리케이션을 구축할 때 대기 구문을 코드에 구현하는 것은 필수 기술입니다. 그리고 IronPDF를 통합함으로써 메인 스레드를 차단하지 않고 즉석에서 PDF 문서를 생성하여 애플리케이션을 다음 단계로 발전시킬 수 있습니다.
IronPDF를 직접 사용해볼 준비가 되었나요? 30일 무료 체험으로 시작할 수 있습니다. 개발 목적 사용 시 완전히 무료이므로 실제로 어떤 것인지 확인할 수 있습니다. 그리고 맘에 드신다면, IronPDF는 $799에서 시작합니다. 더 큰 절약을 원한다면, Iron Suite에서 두 개의 가격으로 전체 9개의 Iron Software 도구를 얻을 수 있는지를 확인하세요. 즐거운 코딩 되세요!

자주 묻는 질문
C#에서 PDF 렌더링을 어떻게 지연할 수 있나요?
C#에서 'Thread.Sleep' 메서드를 사용하여 동기 대기하거나 'Task.Delay'를 사용하여 비동기적으로 대기하여 PDF 렌더링을 지연할 수 있습니다. 이러한 메서드는 코드를 지정된 기간 동안 일시 정지하여 작업이 적절한 시간에 수행되도록 보장합니다.
C#의 WaitFor 클래스는 무엇인가요?
C#의 WaitFor 클래스는 코드에서 다양한 대기 전략을 구현하는 데 사용됩니다. 'Thread.Sleep' 및 'Task.Delay' 와 같은 메서드를 제공하여 개발자가 필요한 경우 코드 실행을 일시 정지할 수 있도록 도와줍니다.
C#에서 PDF 작업을 위한 비동기 대기를 어떻게 구현할 수 있나요?
C#에서 `Task.Delay` 메서드를 사용하여 비동기 대기를 구현할 수 있습니다. 이는 주 스레드를 차단하지 않고 비동기적으로 대기할 수 있도록 하며 PDF 작업에서 원활한 실행 및 적절한 작업 스케줄링에 특히 유용합니다.
C#에서 작업 실행 관리를 위해 타이머는 어떤 역할을 하나요?
`System.Timers.Timer` 클래스와 같은 타이머는 특정 간격으로 작업을 예약할 수 있도록 합니다. 이들은 정기 간격으로 PDF 생성과 같은 작업을 실행하여 주 스레드를 차단하지 않고 효율적인 작업 관리를 보장하는 데 유용합니다.
C#에서 사용자 정의 대기 기능을 만들 수 있나요?
네, C#에서 비동기 위임자를 사용하여 사용자 정의 대기 기능을 만들 수 있습니다. 이는 특히 기본 대기 방법이 충분하지 않을 때 특정 요구 사항을 충족하기 위해 맞춤형 코드 실행 일시 정지를 가능하게 합니다.
C#에서 대기 전략과 PDF 생성을 통합하는 방법은 무엇인가요?
C#에서 비동기 메서드와 타이머를 사용하여 대기 전략과 PDF 생성을 통합할 수 있습니다. 이는 PDF 생성 작업을 효율적으로 관리하여 다른 프로세스를 차단하지 않고 예약된 실행을 할 수 있도록 보장합니다.
C#에서 HTML을 PDF로 변환하는 방법은 무엇인가요?
C#에서 HTML을 PDF로 변환하려면 IronPDF 같은 라이브러리를 사용할 수 있습니다. 이 라이브러리는 HTML 문자열, URL 및 파일을 효율적으로 PDF 문서로 변환하는 메서드를 제공합니다.
C#에서 비동기 메서드를 사용하는 것의 이점은 무엇인가요?
C#에서 비동기 메서드는 동시에 여러 작업을 병렬로 실행할 수 있게 하여 주 스레드를 차단하지 않고 애플리케이션의 효율성을 향상시킵니다.
.NET 프로젝트에 PDF 라이브러리를 설치하는 방법은 무엇인가요?
.NET 프로젝트에 PDF 라이브러리를 설치하려면 Visual Studio의 NuGet 패키지 관리자를 사용하여 라이브러리를 검색 및 설치할 수 있습니다. 또는, 라이브러리의 DLL 파일을 다운로드하여 프로젝트에 수동으로 추가할 수 있습니다.
C#에서 특정 시간 동안 PDF 렌더링을 일시 중지할 수 있나요?
네, C#에서 'Thread.Sleep'과 같은 메서드를 사용하여 동기 일시 중지하거나 'Task.Delay'를 사용하여 비동기 일시 중지하여 특정 시간 동안 PDF 렌더링을 일시 중지할 수 있습니다. 이를 통해 PDF 생성 작업의 타이밍을 제어할 수 있습니다.




