【发布时间】:2018-08-29 14:13:49
【问题描述】:
如果我通过一个连接向一个集线器发出许多请求,它们将由服务器按顺序执行。所以没有平行现象的推进
我的中心有三种不同的方法
public Task Test1(string invokeId)
{
Clients.Caller.SendAsync("Hello", $"Test1: Before Delay ... InvokeID: {invokeId}");
Task.Delay(5000).Wait();
Clients.Caller.SendAsync("Hello", $"Test1: After Delay ... InvokeID: {invokeId}");
return Task.CompletedTask;
}
public Task Test2(string invokeId)
{
Clients.Caller.SendAsync("Hello", $"Test2: Before Delay ... InvokeID: {invokeId}");
Task.Delay(2500).Wait();
Clients.Caller.SendAsync("Hello", $"Test2: After Delay ... InvokeID: {invokeId}");
return Task.CompletedTask;
}
public Task Test3(string invokeId)
{
Clients.Caller.SendAsync("Hello", $"Test3: Before Delay ... InvokeID: {invokeId}");
Task.Delay(1250).Wait();
Clients.Caller.SendAsync("Hello", $"Test3: After Delay ... InvokeID: {invokeId}");
return Task.CompletedTask;
}
我从客户端 .NET 应用程序中循环调用它们
_connection.SendAsync("Test1", "1").ContinueWith(t => Console.WriteLine($"Test1: { t.Status }"));
_connection.SendAsync("Test2", "2").ContinueWith(t => Console.WriteLine($"Test2: { t.Status }"));
_connection.SendAsync("Test3", "3").ContinueWith(t => Console.WriteLine($"Test3: { t.Status }"));
后续方法
_connection.On("Hello", new Type[] { typeof(string) }, (parameters, state) =>
{
return Console.WriteLine((string)parameters[0]);
}, _connection);
我得到了关注 OUTPUT
- Test1:RanToCompletion
- Test2:RanToCompletion
- Test3:RanToCompletion
- Test1:延迟前 ... InvokeID:1
- Test1:延迟后 ... InvokeID:1
- Test2:延迟前 ... InvokeID:2
- Test2:延迟后 ... InvokeID:2
- Test3:延迟前 ... InvokeID:3
- Test3:延迟后 ... InvokeID:3
如果您查看“Test2: Before Delay ... InvokeID: 2” 将在“Test1: After Delay ... InvokeID: 1”之后直接调用。似乎同时只允许一个 Hub 对象,不管三个调用都会立即返回“RanToCompletion”,它们都会一个接一个地执行。
这似乎很具体,但我想构建一个应用程序,其中每个图形 WPF 对象都会调用 SignalR 来检索内容。如果它们将被顺序调用,我必须寻找另一种解决方案。
我错过了什么?
【问题讨论】:
-
很简单,不要在你的hub方法中阻塞就可以了。