SignalR和标签,窗口,克隆框架
本文关键字:框架 窗口 标签 SignalR | 更新日期: 2023-09-27 18:13:57
我创建了一个简单的应用程序,它接受来自客户端的文本消息,并回复到特定的连接:"嘿,我收到你的消息",除此之外,广播消息给所有其他人。
代码:
1 protected override Task OnConnected(IRequest request, string connectionId)
2 {
3 return Connection.Send(connectionId, "Welcome!");
4 }
5
6 protected override Task OnReceived(IRequest request, string connectionId, string data)
7 {
8 Connection.Send(connectionId, "Connection " + connectionId + " I got your message " + data);
9 return Connection.Broadcast(data);
10 }
一切正常
问题# 1 Connection ID
对初始化器来说是100%唯一的吗?如果我克隆一个浏览器选项卡,或者克隆Iframe呢?从我的测试来看,它是独一无二的。但我需要确保。
问题# 2
看第8行,我不能写return Connection.Send
,因为另一行不会被执行。然而,我认为,这样,我将失去TASK<>返回值。万一我需要呢?
OnReceived
返回Task
,但目前它只返回Connection.Broadcast(data);
的任务和(正如我所说的-我正在失去行#8任务返回对象。)恐怕我做错了什么。也许我不是?
谁在应用周期中使用这个任务结果?
1:是连接ID总是唯一的
2连接。Send不会返回通过客户端返回的值,SignalR不支持。但是,如果您只想等待它并获取任务的状态,您可以在Connection.Send()上执行.Wait()或ContinueWith,
又名
Connection.Send(...).Wait(); // If there's an error this will throw
return Connection.Broadcast(data);
或
Connection.Send(....).ContinueWith(task => {
if(!task.IsFaulted)
{
// Task ran successfully
}
else
{
// Something went wrong when sending, you can get the exception from the task
}
});
return Connection.Broadcast(data);