C# - Return a value asychronously

2019-03-03 10:17发布

    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;
    }

I'm using this code which is executed in a JavaScript script file so I can't call the await keyword.

I want to return a boolean after I set it using SetResult. If the response is not set, it will wait until it's set and will not return anything until it's set. It also has to be asychronous.

How to achieve this without Tasks (as I can't use the await keyword in JavaScript)?

标签: c# jint
1条回答
何必那么认真
2楼-- · 2019-03-03 10:30

If the response is not set, it will wait until it's set and will not return anything until it's set. It also has to be asychronous.

Those two requirements are the exact opposite of each other.

If you need to wait until the result is available, then you need it to be synchronous (that's the definition of synchronous). There are various hacks that can make this work - calling Result is one of them.

If you need it to be asynchronous, then you can't wait until the result is available. In that case you should look into creating a JavaScript promise/deferred object and notify that object when the result arrives.

查看更多
登录 后发表回答