我有以下课程:
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脚本中使用的。
答案 0 :(得分:0)
只有在不等待结果到达的情况下让SendYesNo
返回时,才可以执行此操作。 必须返回Task<bool>
。如果你因为一些JavaScript问题而无法完成这项工作,那么你就失去了它。
也许你可以让SendYesNo
接受你在任务完成时调用的回调(Action
)。