0

我创建了一个简单的应用程序,它接受来自客户端的短信并回复该特定连接:“嘿,我收到了您的消息”,除此之外,将消息广播给所有其他人。

一段代码:

 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      }

一切正常。

Question #1Connection ID初始化程序是 100% 唯一的吗 ?如果我克隆浏览器选项卡怎么办?或克隆 Iframe ?从我的测试来看,它是独一无二的。但我需要确定。

Question #2

看第 8 行,我写不出来return Connection.Send,因为另一行不会被执行。但是我认为,那样的话,我将失去 TASK<> 返回值。如果我需要它怎么办?

OnReceived返回 aTask但目前它只返回Connection.Broadcast(data);' 的任务并且(正如我所说的 - 我正在丢失 line 的 #8 任务返回对象。)恐怕我在这里做错了什么。或者我不是?

无论如何,谁在应用程序周期中使用此任务结果?

4

1 回答 1

1

1:是的,连接 ID 始终是唯一的
2 Connection.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);
于 2013-05-17T08:48:56.227 回答