C#Task를 사용하여 비동기식 작업을 수행하는 방법
Task 를 사용하는 이유
루틴은 창설과 발송의 밑바닥 도구이기 때문에 일정한 한계가 있다.
Task 및 Thread 차이점
1. 임무는 라인 위에 구축된 것이다. 즉, 임무는 결국 라인에 던져서 집행해야 한다는 것이다.
2. 임무와 라인은 일대일의 관계가 아니다. 예를 들어 10개의 임무를 열면 10개의 라인을 열 수 있다는 것이 아니다. 이 임무는 약간 라인 탱크와 유사하지만 임무는 라인 탱크에 비해 매우 적은 비용과 정확한 제어를 가진다.
Task 는 Thread 와 마찬가지로 System 에 있습니다.Threading 네임스페이스 아래
라인에 비해Task는 더욱 고급스러운 추상적인 개념으로 라인을 통과하거나 통과하지 않는 병행 조작을 표시한다.
Task 소개
Task 클래스는 단일 작업이 값을 반환하지 않고 비동기적으로 실행된다는 것을 나타냅니다.Task 대상은 하나의 중심 사상이 임무를 바탕으로 하는 비동기 모델을 처음으로 도입한 것이다.NET Framework 4에서작업 수행 Task 대상이 주 응용 프로그램의 동기화 방식이 아니라 비동기적으로 온라인 스레드를 실행하기 때문에, Status 속성과 IsCanceled,, IsCompleted, IsFaulted 속성을 사용하여 작업의 상태를 확인할 수 있습니다.대부분의 경우, lambda 표현식은 지정된 임무를 수행하는 데 사용됩니다.
Task 단순화
Task의 구조 함수를 사용하여 작업을 만들고 Start 방법을 호출하여 작업을 시작하고 비동기식으로 작업을 수행합니다.
static void Main(string[] args)
{
Console.WriteLine(" .");
//
Task task = new Task(() => {
Console.WriteLine(" System.Threading.Tasks.Task .");
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
});
// ,
task.Start();
Console.WriteLine(" ");
}
Framework 4.5부터 백그라운드 라인으로 이루어진 Task를 시작하고 정적 방법인 Task를 사용할 수 있습니다.Run
Task task = Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("Foo");
});
Task는 기본적으로 스레드 탱크를 사용합니다. 모두 백그라운드 스레드입니다.주 라인이 끝날 때 모든 작업이 멈추는 것을 의미합니다.Task 실행 상태
1. 대기(Wait)
Wait 메서드를 사용하면 작업이 완료될 때까지 작업을 막을 수 있으며 효과는 Thread와 같습니다.Join:
Task task = Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("Foo");
});
Console.WriteLine(task.IsCompleted); //False
task.Wait();// ,
Console.WriteLine(task.IsCompleted); //True
Console.ReadLine();
2. 반환값
Task
Task<int> task = Task.Run (() => { Console.WriteLine ("Foo"); return 3; });
int result = task.Result; // Blocks if not already finished
Console.WriteLine (result); // 3
다음 예제에서는 LINQ를 사용하여 처음 3백만 개의 정수(2부터 시작)의 소수에 따라 작업을 만듭니다.
Task<int> primeNumberTask = Task.Run(() =>
Enumerable.Range(2, 3000000).Count(n => Enumerable.Range(2, (int)Math.Sqrt(n) - 1).All(i => n % i > 0)));
Console.WriteLine("Task running...");
Console.WriteLine("The answer is " + primeNumberTask.Result);
이 코드는 "Task running..."을 인쇄합니다.그리고 몇 초 후에 216815를 인쇄합니다.3. Task.Delay
Task.Delay는 Thread입니다.Sleep의 비동기식 버전
Task.Delay(5000).GetAwaiter().OnCompleted(()=>Console.WriteLine(42));
혹은
Task.Delay(5000).ContinueWith(ant => Console.WriteLine(42));
이상은 C#에서 Task를 사용하여 비동기적인 조작을 수행하는 방법에 대한 상세한 내용입니다. c#에서 Task로 비동기적인 조작을 수행하는 것에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.