有没有办法找出侦听器(连接到集线器的客户端)的数量

如果至少有一个客户端已连接,我正在try 运行/启动任务,否则不要启动它:

[HubName("taskActionStatus")]
public class TaskActionStatus : Hub, IDisconnect
{
    static CancellationTokenSource tokenSource;

    public void GetTasksStatus(int? siteId)
    {
        tokenSource = new CancellationTokenSource();
        CancellationToken ct = tokenSource.Token;

        ITaskRepository taskRepository = UnityContainerSetup.Container.Resolve<ITaskRepository>();

        // init task for checking task statuses
        var tasksItem = new DownloadTaskItem();
        taskRepository.GetTasksStatusAsync(siteId, tasksItem, ct);

        // subscribe to event [ listener ]
        tasksItem.Changed += new EventHandler<TaskEventArgs>(UpdateTasksStatus);
    }

    public void UpdateTasksStatus(object sender, TaskEventArgs e)
    {
        Clients.updateMessages(e.Tasks);
    }

    // when browsing away from page
    public Task Disconnect()
    {
        try
        {
            tokenSource.Cancel();
        }
        catch (Exception)
        {
            //
        }

        return null;
    }
}

谢谢

推荐答案

无法从信号机获取此计数.你必须使用Hub上的OnConnect()OnDisconnect()方法来自己计数.

使用静态类保存计数的简单示例:

public static class UserHandler
{
    public static HashSet<string> ConnectedIds = new HashSet<string>();
}

public class MyHub : Hub
{
    public override Task OnConnectedAsync()
    {
        UserHandler.ConnectedIds.Add(Context.ConnectionId);
        return base.OnConnectedAsync();
    }

    public override Task OnDisconnectedAsync(Exception exception)
    {
        UserHandler.ConnectedIds.Remove(Context.ConnectionId);
        return base.OnDisconnectedAsync(exception);
    }
}

然后从UserHandler.ConnectedIds.Count算起.

Asp.net相关问答推荐

Windows 命令行中的/p:是什么意思

创建项目 ASP.NET Core (.NET Core) 和 ASP.NET Core (.NET Framework) 有什么区别

InvalidOperationException:在程序集上找不到UserSecretsIdAttribute

如何在没有 Select 按钮的情况下在 GridView 中实现全行 Select ?

为什么微软决定支持 jQuery 如此重要?

登录成功后 User.Identity.IsAuthenticated 为 false

在控制器 asp.net mvc 5 的视图上显示错误消息

RestSharp 获取请求的完整 URL

SameSite 属性如何自动添加到我的 Asp.net_SessionID cookie 中?

Razor 主机工厂错误

如何以编程方式将标签的前景色设置为其默认值?

*.csproj 中的 usevshostingprocess 是什么?

InvalidOperationException:无法为角色创建 DbSet,因为此类型未包含在上下文模型中

如何在实体框架中添加表?

投票有什么问题?

如何获取部署在 Azure 网站上的 ASP.NET 5 应用程序的错误详细信息?

哪个控件导致了回发?

避免在 ASP.NET MVC 中使用会话状态是一种好习惯吗?如果是,为什么以及如何?

哪个事件先调用?母版页 Page_Load 或内容页 Page_Load

强制 IIS Express 进入classic 管道模式