【问题标题】:C# - Return a value asychronouslyC# - 异步返回一个值
【发布时间】:2015-06-17 18:04:18
【问题描述】:
    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 关键字)?

【问题讨论】:

  • SetResult是某种动作方法吗?
  • 如何从 JavaScript 文件调用 C# 方法?
  • @JLRishe 我正在使用 Jint,一个 JavaScript 解释器

标签: c# jint


【解决方案1】:

如果没有设置响应,它会一直等待,直到它被设置,并且在它被设置之前不会返回任何东西。它还必须是异步的。

这两个要求是完全相反的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多