>  기사  >  백엔드 개발  >  C#Task에 대한 자세한 설명

C#Task에 대한 자세한 설명

小老鼠
小老鼠원래의
2024-03-14 09:54:071377검색

Task는 C#에서 비동기 작업을 나타내는 데 사용되는 개체이며 System.Threading.Tasks 네임스페이스에 있습니다. Task는 동시 비동기 작업을 처리하기 위한 고급 API를 제공하므로 .NET 애플리케이션에서 비동기 코드를 더 쉽게 작성할 수 있습니다.

C#Task에 대한 자세한 설명

Task는 C#에서 비동기 작업을 표현하는 데 사용되는 개체이며 System.Threading.Tasks 네임스페이스에 있습니다. Task는 동시 비동기 작업을 처리하기 위한 고급 API를 제공하므로 .NET 애플리케이션에서 비동기 코드를 더 쉽게 작성할 수 있습니다. 다음은 Task의 주요 기능과 사용법에 대한 자세한 설명입니다.

1. 작업 만들기 Task.Run 메서드를 사용하여 백그라운드 스레드에서 작업을 수행하고 해당 작업을 나타내는 Task 개체를 반환할 수 있습니다.

csharp

Task task = Task.Run(() =>  
{  
    // 这里是后台线程上执行的代码  
    Console.WriteLine("Running in a separate thread.");  
});

2. 작업이 완료될 때까지 대기

Task.Wait 메서드를 사용하면 하나 이상의 Task 개체가 완료될 때까지 기다릴 수 있습니다.

csharp

task.Wait(); // 等待 task 完成

또는 비동기 메서드에서 wait 키워드를 사용하여 현재 스레드를 차단하지 않고 작업이 완료될 때까지 비동기적으로 기다릴 수 있습니다.

csharp

await task; // 异步等待 task 完成

3. 작업 상태

Task 개체에는 Created(생성됨), WaitingForActivation(활성화 대기 중), Running(실행 중), RanToCompletion(완료까지 실행 중), Canceled(취소됨) 등 여러 가지 상태가 있습니다. 및 Faulted(오류가 발생했습니다). Task.Status 속성을 통해 Task의 현재 상태를 확인할 수 있습니다.

4. 예외 처리

태스크에서 예외가 발생하고 예외가 포착되지 않으면 태스크 상태가 Faulted가 됩니다. Task.Exception 속성을 통해 예외 정보에 액세스할 수 있습니다. Wait를 사용하는 경우 Wait 식은 예외를 다시 발생시키므로 try-catch 블록에서 이를 처리해야 합니다.

csharp

try  
{  
    await task;  
}  
catch (AggregateException ae)  
{  
    // 处理异常  
}

5 Task의 반환 값

Task가 계산이나 작업을 나타내고 결과를 반환하려는 경우 Taskb54c2c292509147c0b54128f4eb90887를 사용할 수 있습니다. 여기서 TResult는 반환 값의 유형입니다.

csharp

Task<int> taskWithResult = Task.Run(() =>  
{  
    // 执行一些计算  
    return 42;  
});  
  
int result = await taskWithResult; // 异步等待并获取结果

6. 작업 취소

CancellationToken을 사용하여 하나 이상의 작업을 취소할 수 있습니다.

csharp

CancellationTokenSource cts = new CancellationTokenSource();  
Task cancellableTask = Task.Run(() =>  
{  
    for (int i = 0; i < 100; i++)  
    {  
        cts.Token.ThrowIfCancellationRequested();  
        // 执行一些操作  
    }  
}, cts.Token);  
  
// 在某个时刻取消任务  
cts.Cancel();

7. 작업 조합

Task.WhenAll 또는 Task.WhenAny를 사용하여 여러 작업 개체가 완료될 때까지 기다릴 수 있습니다. Task.WhenAll은 모든 작업이 완료될 때까지 기다리는 반면 Task.WhenAny는 하나의 작업이 완료될 때까지 기다립니다.

csharp

Task task1 = Task.Run(() => { /* ... */ });  
Task task2 = Task.Run(() => { /* ... */ });  
  
Task allTasks = Task.WhenAll(task1, task2);  
await allTasks; // 等待所有任务完成
csharp
Task firstTaskToComplete = Task.WhenAny(task1, task2);  
await firstTaskToComplete; // 等待任何一个任务完成

8 Task의 실행 컨텍스트를 구성합니다

TaskScheduler를 구성하여 Task가 실행되는 스레드 또는 스레드 풀을 제어할 수 있습니다. 이는 스레드 사용량을 보다 세밀하게 제어해야 하는 시나리오에 유용합니다.

Task는 .NET에서 비동기 프로그래밍을 처리하기 위한 강력한 도구로, 특히 I/O 집약적이거나 계산 집약적인 작업을 처리할 때 응답성이 뛰어나고 효율적인 코드를 작성할 수 있습니다. 작업의 기본 개념과 사용법을 이해하면 비동기 프로그래밍 모델을 더 잘 활용하여 애플리케이션의 성능과 확장성을 향상시킬 수 있습니다.

위 내용은 C#Task에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.