C# 5.0 (async/await)의 새로운 비동기 패턴으로 몇 가지 테스트를 수행합니다. 비동기 메서드가 어떻게 호출되는지 이해하는데 문제가 있습니다.C# 5.0으로 비동기 메서드 호출하기
이 코드를 고려 :
private async Task<string> DownloadAsync()
{
progress.ProgressChanged += (s, e) =>
{
progressBar1.Value = e.value;
};
return await DownloadSomething(myurl, progress);
}
private async void CallDownloadAsync()
{
string text = await DownloadAsync();
progressBar1.Value = 0;
label1.Text = "Done!";
}
private void button4_Click(object sender, EventArgs e)
{
CallDownloadAsync();
}
그래서,이 코드는 잘 작동합니다. "button4"를 클릭하면 다운로드 작업이 시작되고 ProgressBar가 올바르게 업데이트됩니다.
그러나, 나는이 같은 CallDownloadAsync() 메소드를 제거하여 조금 더 내 코드를 압축하고 싶습니다 :
그래서 여기private void button4_Click(object sender, EventArgs e)
{
new Action(async() =>
{
string result = await Task.Run<string>(() => DownloadAsync());
}).Invoke();
label1.Text = "Running...";
}
, 내가 직접 DownloadAsync 메소드를 호출하지만, 작업을 시작하려면 내 Button4를 눌렀을 때 크로스 스레드 작업이 유효하지 않습니다 progressBar에. 따라서 Action()과 CallDownloadAsync() 메서드 호출의 주된 차이점은 무엇인지 이해할 수 없습니다.