调用异步Task<string>方法返回状态机而非字符串的问题排查与修复
问题原因
你调用异步方法时未等待其执行完成,直接对返回的Task<string>对象调用ToString(),输出的是Task对象的类型信息,而非异步方法实际返回的字符串结果。
修复方案
将按钮点击事件修改为异步方法,并使用await等待ChatGPT方法执行完成:
private async void btnCall_Click(object sender, EventArgs e) { string token = txtToken.Text; string model = cmbModel.Text; string message = txtPrompt.Text; txtDisplay.Text = await ChatGPT(token, model, message); }
补充说明
- WinForms的事件处理方法允许使用
async void(这是少数适合用async void的场景),这样就能在方法内部使用await关键字。 - 直接调用
ChatGPT()而不加await,得到的是未完成的Task<string>实例,ToString()会返回该Task对象的类型标识,也就是你看到的那段长字符串。 - 加上
await后,程序会等待异步方法执行完毕,拿到实际的字符串返回值,再赋值给txtDisplay.Text。
内容的提问来源于stack exchange,提问作者asmgx
相关产品推荐
相关产品推荐

