C# – 异步返回一个值

private TaskCompletionSource response; private string _text = ""; public void SetResult(bool result) { this.response.SetResult(result); } public async Task SendYesNo() { response = new TaskCompletionSource(); MessageBox.Show(this._text, "", MessageBoxButtons.YesNo); this._text = ""; return response.Task.Result; } 

我正在使用这个在JavaScript脚本文件中执行的代码, 因此我无法调用await关键字。

我想使用SetResult 设置它之后返回一个布尔值。 如果没有设置响应,它将一直等到它被设置,并且在设置之前不会返回任何内容。 它也必须是同步的。

如何在没有任务的情况下实现这一点(因为我不能在JavaScript中使用await关键字)?

如果没有设置响应,它将一直等到它被设置,并且在设置之前不会返回任何内容。 它也必须是同步的。

这两个要求完全相反。

如果您需要等到结果可用,那么您需要它是同步的(这是同步的定义 )。 有各种黑客可以使这项工作 – 调用Result就是其中之一。

如果您需要它是异步的,那么您不能等到结果可用。 在这种情况下,您应该研究创建JavaScript promise / deferred对象,并在结果到达时通知该对象。