C# 当我的一个集线器方法位于线程中时,如何捕获信号器客户端消息。睡眠延迟?

C# 当我的一个集线器方法位于线程中时,如何捕获信号器客户端消息。睡眠延迟?,c#,signalr,C#,Signalr,对于问答游戏,我有两种方法。 一个中心方法向客户发送问题,一个方法收集答案。 SendQuestion方法是问题发送者的循环。在循环中,通过运行System.Threading.Thread.Sleep(10000),将问题发送给Clients.All.QuestionReceived方法,并等待10秒钟回答客户机。 睡眠后,阅读静态列表答案数组以获得正确答案 另一个SendAnswer方法收集答案并将其存储在静态答案数组中 我有一个问题,当我想计算正确的答案后,线程睡眠。但是数组是空的。 当f

对于问答游戏,我有两种方法。 一个中心方法向客户发送问题,一个方法收集答案。 SendQuestion方法是问题发送者的循环。在循环中,通过运行System.Threading.Thread.Sleep(10000),将问题发送给Clients.All.QuestionReceived方法,并等待10秒钟回答客户机。 睡眠后,阅读静态列表答案数组以获得正确答案

另一个SendAnswer方法收集答案并将其存储在静态答案数组中

我有一个问题,当我想计算正确的答案后,线程睡眠。但是数组是空的。 当for循环结束时,SendAnswer将触发所有答案并存储在数组中。但现在计算它们已经太晚了

如何在running for loop方法中获得此答案的答案

对于我的示例代码;其中一个管理员如果发送开始消息,那么集线器开始向客户端发送消息

public class ChatHub : Hub
{
    public static List<string> mesajlar = new List<string>();
    public void SendAnswer(string username, string message)
    {
        Trace.WriteLine(username + " - SendAnswer - " + message);
        mesajlar.Add(message);
    }

    public void SendMessage(string username, string message)
    {
        if (message == "Start")
        {
            Clients.All.MessageReceived(username, "Sleep BEGIN");
            System.Threading.Thread.Sleep(1000 * 20);
            Clients.All.MessageReceived(username, "Sleep END");
            foreach (var s in mesajlar)
            {
                Trace.WriteLine(s);
            }
        } else
        {
            Trace.WriteLine(username + " - SendMessage - " + message);
            mesajlar.Add(message);
        }
        Clients.All.MessageReceived(username, message);
    }

    public void SendQuestion(string question, string answer1, string answer2, string answer3)
    {
        Clients.All.QuestionReceived(question, answer1, answer2, answer3);
    }
}
公共类聊天中心:中心
{
公共静态列表mesajlar=新列表();
public void SendAnswer(字符串用户名、字符串消息)
{
Trace.WriteLine(用户名+“-SendAnswer-“+消息);
mesajlar.Add(消息);
}
公共无效发送消息(字符串用户名、字符串消息)
{
如果(消息==“开始”)
{
Clients.All.MessageReceived(用户名,“Sleep BEGIN”);
系统线程线程睡眠(1000*20);
Clients.All.MessageReceived(用户名,“睡眠结束”);
foreach(mesajlar中的var s)
{
Trace.WriteLine(s);
}
}否则
{
Trace.WriteLine(用户名+“-发送消息-“+消息);
mesajlar.Add(消息);
}
Clients.All.MessageReceived(用户名、消息);
}
public void SendQuestion(字符串问题、字符串回答1、字符串回答2、字符串回答3)
{
客户。收到所有问题(问题、答案1、答案2、答案3);
}
}

问题是为什么要使用睡眠?它将阻止当前线程。我想等待客户端在标准时间内应答从不使用线程。在生产应用程序中睡眠。它用于在MTA线程上测试/调试时模拟冗长的操作。在.NET中,没有其他理由使用它。使用队列了解您正在做的事情。谢谢。这个URL是一个好的起点吗?是的,非常好。事实上,我喜欢Hangfire这样的东西,但这是一个好的开始。问题是你为什么要使用睡眠?它将阻止当前线程。我想等待客户端在标准时间内应答从不使用线程。在生产应用程序中睡眠。它用于在MTA线程上测试/调试时模拟冗长的操作。在.NET中,没有其他理由使用它。使用队列了解您正在做的事情。谢谢。这个URL是一个好的起点吗?是的,非常好。事实上,我喜欢Hangfire这样的东西,但这是一个好的开始。