【问题标题】:SignalR .NET framework vs SignalR .NET Core featureSignalR .NET 框架与 SignalR .NET Core 功能
【发布时间】:2020-02-04 07:56:37
【问题描述】:

This example 来自 SignalR .NET Core 上关于“创建和使用集线器”的 Microsoft 文档:

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;

namespace SignalRChat.Hubs
{
    public class ChatHub : Hub
    {
        public async Task SendMessage(string user, string message)
        {
            await Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }
}

And this example 来自 SignalR .NET Framework 上关于“创建和使用集线器”的 Microsoft 文档:

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
    public class ChatHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }
    }
}

我是否正确假设 SignalR .NET Framework 不支持来自客户端调用的 returnig 任务,而 SignalR .NET Core 具有此功能?是否只有在 .NET Core 中我们才能等待对客户端的调用以确保收到消息?

【问题讨论】:

  • 没有。您需要检查文档,而不仅仅是示例。好的例子通常只显示一个概念。在这种情况下,相关文档是 Server Hubs API Guide The method that you call executes asynchronously. 中的 Asynchronous Execution 部分
  • Is it only in .NET Core that we can await calls to Clients to make sure that the message was received? 这是一个不同的问题,您无法仅通过等待来确保收到消息

标签: c# .net signalr


【解决方案1】:

如果您覆盖基础集线器方法,您可以看到它们返回 Task,因此您可以让其他方法也返回一个 Task,并将它们设为 async

public override Task OnConnected()
{
    return base.OnConnected();
}

public override Task OnDisconnected(bool stopCalled)
{
    return base.OnDisconnected(stopCalled);
}

public override Task OnReconnected()
{
    return base.OnReconnected();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2020-08-17
    • 2021-07-13
    相关资源
    最近更新 更多