Languages/C#
C# - 비동기 처리(async, await)
라큐브
2022. 7. 5. 02:47
async
- 메서드 내부에 await 키워드가 있다는 걸 알려주는 역할입니다.
- await 키워드가 없어도 되지만 Warning 메시지가 표시됩니다.
비동기 처리
동시에 시작하여 먼저 끝난 순서대로 반환됩니다.
await
- 작업이 끝날 때까지 대기하고 반환 값을 할당하는 경우 사용합니다.
반환 값 유무 | X | O |
대기 지시문 | Task.Wait() | await Task |
namespace Async
{
class Program
{
static void Main(string[] args)
{
RunTask();
}
static async void RunTask()
{
Task TasksA = Task.Run(() => TaskA());
Task TasksB = Task.Run(() => TaskB());
Task TasksC = Task.Run(() => TaskC());
Task<string> TasksD = Task.Run(() => TaskD());
// ASync 비동기 실행
// 반환 값이 없을 경우 Task.Wait()로 작업이 완료될때까지 대기.
// Tasks A가 종료될때까지 대기 하세요.
TasksA.Wait();
// Tasks B가 종료될때까지 대기 하세요.
TasksB.Wait();
// Tasks C가 종료될때까지 대기 하세요.
TasksC.Wait();
// Tasks D가 종료될때까지 대기 하세요.
TasksD.Wait();
// await 키워드는 반환 값이 있을 때 사용.
// await 키워드로 대기하고 반환 값 할당.
string text = await TasksD;
// Sync 동기 실행
// TaskA();
// TaskB();
// TaskC();
}
static async void TaskA()
{
Thread.Sleep(3000);
Console.WriteLine("Task A 종료!");
}
static async void TaskB()
{
Thread.Sleep(2000);
Console.WriteLine("Task B 종료!");
}
static async void TaskC()
{
Thread.Sleep(1000);
Console.WriteLine("Task C 종료!");
}
static async Task<string> TaskD()
{
Thread.Sleep(500);
Console.WriteLine("Task D 종료!");
return "Task D 종료!";
}
}
}
반응형