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任务返回对象。)恐怕我做错了什么。也许我不是?

谁在应用周期中使用这个任务结果?

SignalR和标签,窗口,克隆框架

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);