C# - 异步返回一个值

时间:2015-06-17 18:04:18

标签: c# jint

    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关键字)?

1 个答案:

答案 0 :(得分:4)

  

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

这两个要求完全相反。

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

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