这是我尝试使用的具有异步响应的 3 层应用程序模型:
- 图形用户界面
- 后端
- 远程服务器
图形用户界面:
private async void readFloatButton_Click(object sender, RoutedEventArgs e)
{
FloatValueLabel.Content = (await srvProtocol.ReadFloat("ReadFloatX")).ToString();
}
后端(使用内部变量binReader和connection)
public Task<float> ReadFloat(string cmd)
{
var tcs1 = new TaskCompletionSource<float>();
var floatTask = tcs1.Task;
RegisterResponse(cmd,
() =>
tcs1.SetResult(_binReader.ReadSingle());
);
// We are ready: now send request to server(assuming that this is a quick operation)
connection.Send(cmd);
return floatTask;
}
这里 RegisterResponse 将 <Key, Action> 对添加到一些线程安全的字典中。另一个工作线程从网络流消息(消息头)中读取,并根据消息头中的字符串 cmd 调用操作。
现在的问题:
- 当我需要订阅 GUI 元素以进行定期更新(不是单个回调)时,是否可以达到相同的简洁程度?