我想知道这个例子中的线程如何流动。有异步事件处理程序,它调用另一个异步方法,有两个等待。我可以理解这样的流程:
我的假设是否正确?或者这里有僵局。
private async void button1_Click(object sender, RoutedEventArgs e)
{
string s = await LoadStringAsync();
textBox1.Text = s;
}
static async Task<string> LoadStringAsync()
{
string firstName = await GetFirstNameAsync();
string lastName = await GetLastNameAsync();
return firstName + ” ” + lastName;
}
答案 0 :(得分:1)
你的流程几乎是正确的。只需一次修改:方法无法返回两次(步骤4和9)。由于LoadStringAsync
已经返回了未完成的任务,因此它只会在第二个await
处直接返回到UI线程。
您提供的代码中没有死锁。