TaskCompletionSource异步返回

时间:2015-06-18 14:14:19

标签: c# asynchronous task

我有以下课程:

public class Npc
{
    private string _text = "";

    private TaskCompletionSource<bool> tcs;

    public void AddText(string text)
    {
        this._text += text;
    }

    public void SendOk()
    {
        MessageBox.Show(this._text, "", MessageBoxButtons.OK);

        this._text = "";
    }

    public bool SendYesNo()
    {
        tcs = new TaskCompletionSource<bool>();

        MessageBox.Show(this._text, "", MessageBoxButtons.YesNo);

        this._text = "";

        return tcs.Task.Result;
    }

    public void SetResult(bool result)
    {
        tcs.TrySetResult(result);
    }
}

我希望方法SendYesNo仅在使用tcs.Result方法设置后返回SetResult值(SetResult方法将从其他部分调用码)。

但是,当我执行SendYesNo时,我的程序就会挂起(等待结果)。有没有办法使SendYesNo ashcyronous所以我可以设置结果?

注意:我知道使方法异步并调用await关键字会使其异步。但是,我不能简单地调用await关键字,因为这些方法是在JavaScript脚本中使用的。

1 个答案:

答案 0 :(得分:0)

只有在不等待结果到达的情况下让SendYesNo返回时,才可以执行此操作。 必须返回Task<bool>。如果你因为一些JavaScript问题而无法完成这项工作,那么你就失去了它。

也许你可以让SendYesNo接受你在任务完成时调用的回调(Action)。