'CSHARP #async #await'에 해당되는 글 1건

  1. 2021.07.14 async await keyword를 이용한 비동기 프로그래밍

1. async 키워드로 수식된 메서드는 비동기 메서드가 된다.

2. 비동기 메서드 내에서는 적어도 하나의 await 키워드가 있어야한다.

3. async 키워드로 수식된 비동기 메서드가 아니라면 await 키워드를 사용할 수 없다.

4. 이벤드 핸들러가 아닌 비동기 메서드를 만들려면 async 키워드를 지정하고 리턴형을 TaskTask<TResult>로 지정한다.

 

private long DoSomething()
{
	var sw = Stopwatch.StartNew();
	Thread.Sleep(8000);
	sw.Stop();
	return sw.ElapsedMilliseconds;
}

private async void btnExecute1_Click(object sender, EventArgs e)
{
	toolStripStatusLabel1.Text = "";
	var elapsed = await Task.Run(() => DoSomething());
	toolStripStatusLabel1.Text = "완료 : " + elapsed.ToString();
}

private async Task<long> DoSomethingAsync()
{
     var sw = Stopwatch.StartNew();
     await Task.Delay(1000);
     sw.Stop();
     return sw.ElapsedMilliseconds;
}

private async void btnExecute2_Click(object sender, EventArgs e)
{
	toolStripStatusLabel2.Text = "";
	var elapsed = await DoSomethingAsync();
	toolStripStatusLabel2.Text = "완료 : " + elapsed.ToString();
}


여러 개의 비동기 작업을 수행할 때는 List<Task> 객체를 사용할 수 있다.
var eggsTask = FryEggsAsync(20);
var baconTask = FryBaconAsync(3);
var toastTask = MakeToastWithButterAndJamAsync(2);

var breakfastTasks = new List<Task> { eggsTask, baconTask, toastTask };
while (breakfastTasks.Count > 0)
{
	Task finishedTask = await Task.WhenAny(breakfastTasks);
	if (finishedTask == eggsTask)
	{
		Console.WriteLine("eggs are ready");
	}
	else if (finishedTask == baconTask)
	{
		Console.WriteLine("bacon is ready");
	}
	else if (finishedTask == toastTask)
	{
		Console.WriteLine("toast is ready");
	}
	breakfastTasks.Remove(finishedTask);
}

Posted by lI헐헐Il
,