-1
Stephen Cleary의 deadlock example 라인을 따라 실험하고 있습니다. 다음 코드와 왜 ConfigureAwait (false) 후에 UI 스레드를 만질 수 있습니까?
, 나는 (그러나 단지 시연, 안 좋은 연습)ConfigureAwait(false)
를 사용하여 교착 상태를 회피하고 있습니다 :
private Uri uri = new Uri("http://ip.jsontest.com/");
public async Task WaitABit()
{
await Task.Delay(3000).ConfigureAwait(false);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var task = WaitABit();
task.Wait();
textbox.Text = "aa";
}
을 내 이해에 따르면, ConfigureAwait(false)
이 교착 상태를 방지 SynchronizationContext에 포착되지 않기 때문에 , 따라서 무료 ThreadPool 스레드에서 연속이 발생할 수 있습니다.
그러나 알고있는 한 ThreadPool 스레드는 UI를 직접 만질 수 없습니다. 어떻게 작동합니까?
deadlock을 방지하려면 단순히 'async' 코드를 차단하지 마십시오. 링크 한 기사를 통해 매우 명확하게 읽을 수 있습니다. 당신은'WaitABit'을 블로킹하는 대신 '기다려야한다'. – JSteward
@JSteward 제 질문을 더 잘 읽어야합니다. 나는 '기다리는 법'을 안다. 이것은 단지 실험 일 뿐이다. – Gigi