2
절대 완료되지 않는 것 같은 C# 비동기 메서드가 있습니다. 델리게이트를 통해 호출되고 양식을 만듭니다. 델리게이트 또는 양식 작성을 제거하면 제대로 작동합니다. 어떤 통찰력이라도 대단히 감사하겠습니다! 코드는 다음과 같이양식을 생성하지만 완료되지 않는 비동기 메서드에 대한 대리자 사용
는public delegate Task<bool> TaskDel();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Tag = (TaskDel)taskAsync;
}
private async void button1_Click(object sender, EventArgs e)
{
// if I don't use a delegate here there is no problem.
await Task.Run(() => ((sender as Button).Tag as TaskDel)());
}
public async Task<bool> taskAsync()
{
await new HttpClient().GetStringAsync(URL);
Form form = new Form(); // if I remove this line method works.
await new HttpClient().GetStringAsync(URL);
return true; // as is, never reaches this line
}
}
코드는 내가 문제를 각성이 쓸 수있는 가장 간단한이었다. 호출 된 메서드는 컴파일시에 알 수 없으므로 실제로 대리자를 사용해야합니다. 폼 생성과 델리게이트 사용이 왜 실행을 막는 지 알기를 정말로 원합니다. 당신의 생각에 감사드립니다. –
UI 스레드가 아닌 스레드에서 새 Form을 호출 할 수 없기 때문에 Task.Run이 수행합니다. –
아, 나는 그 Task.Run 않는 것을 알지 못했습니다. 나는 그것이 UI 쓰레드에서 돌아가는 것처럼 보일 것이라고 생각했다. 그리고 대의원과 함께 기다릴 필요는 없습니다. 매우 감사합니다. –