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