C# - 异步返回值

本文关键字:返回值 异步 | 更新日期: 2023-09-27 17:56:44

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

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

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

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

C# - 异步返回值

如果未设置响应,它将等到设置,并且在设置之前不会返回任何内容。它还必须是非同步的。

这两个要求完全相反。

如果你需要等到结果可用,那么你需要它是同步的(这是同步的定义)。有各种黑客可以做到这一点 - 打电话Result就是其中之一。

如果您需要它是异步的,那么您不能等到结果可用。在这种情况下,您应该考虑创建一个JavaScript承诺/延迟对象,并在结果到达时通知该对象。