TaskCompletionSource 异步返回

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

我有以下类:

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 仅在使用 SetResult 方法设置后返回 tcs.Result 值(SetResult 方法将从代码的另一部分调用)。

但是,当我执行SendYesNo时,我的程序只是挂起(它等待结果)。有没有办法使SendYesNo阿什西龙,以便我可以设置结果?

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

TaskCompletionSource 异步返回

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

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