一段如下的代码,它是必然死锁的:
private void button1_Click(object sender, EventArgs e){Task<string> res = GetResAsync();textBox1.Text = res.Result;}private async Task<string> GetResAsync(){string t = await Task.Run(() => {Thread.Sleep(1000);return "返回结果1";});return t;}
在这段代码里,GetResAsync()函数是使用await Task.Run来等线程任务执行返回一个字符串结果。
因此在textBox1.Text = res.Result里想获取结果显示。
那么就需要执行res.Result。
执行res.Result时,需要等线程执行结果,它采用一个wait函数等线程完成。
因为在前面await Task.Run已经在等线程去执行,这时就会造成死锁。
要解决上述的问题,只有两