我有一些hubProxy.Invoke("Method", param)
異步執行的方法。他們都調用相同的方法,但具有不同的參數。問題在於它們都在一些PC上正確執行,但另一個面臨的問題是隻有第一個方法調用被執行,而其他方法將永遠執行。 方法看起來像SignalR集線器調用死鎖
if (!connectingTask.IsCompleted)
{
logger.Debug("awaiting for SignalR connection");
await connectingtTask;
logger.Debug("SignalR connected");
}
await hubProxy.Invoke("MethodName", args);
logger.Debug("MethodName invoked");
凡connectingTask = Connection.Start();
和Connection
是HubConnection實例。
當所有的方法(2,例如)執行輸出看起來像
Method 1: awaiting for SignalR connection
Method 2: awaiting for SignalR connection
Method 1: SignalR connected
Method 1: MethodName invoked
Method 2: SignalR connected
Method 2: MethodName invoked
而當只執行第一種方法輸出看起來像
Method 1: awaiting for SignalR connection
Method 2: awaiting for SignalR connection
Method 1: SignalR connected
Method 2: SignalR connected
Method 1: MethodName invoked
而Method 2
被死鎖。 Connection.StateChanged
回調中沒有方塊,Invoke()
方法後沒有方塊。 那麼我在做什麼錯誤,以及如何正確調用與不同的args相同的方法?我應該有一些隊列還是什麼?
編輯還是可以因爲我在await connectionTask
之後發送Invoke
?現在無法檢查,因爲在我的電腦上一切正常。鏈接:
https://forums.asp.net/t/2024936.aspx?C+Client+Hangs+Deadlocks+Never+Returns
編輯如果涉及我的樞紐的方法。我祈求有Task
返回類型。
編輯 這裏是我的樞紐方法:
public Task Attach(string groupName)
{
return Groups.Add(Context.ConnectionId, groupName);
}
我無法打開跟蹤,因爲在我的電腦通常都是正確的,但一旦我能夠重現同樣的問題。不記得如何,我會盡量找到後來,但問題是,我沒有收到答案時調用集線器附加方法,只是簡單地將用戶添加到組。所以現在,而不是await hubProxy.Invoke("Attach", groupName)
我使用hubProxy.Invoke("Attach", groupName)
。無法理解爲什麼我的第一個調用總是成功,我在跟蹤中看到了一些答案,但之後,同一方法的所有調用都失敗。但是如果我等待一段時間(大約10+秒)並調用這個方法,我又會得到迴應。所以看起來我只能每10秒調用一次集線器方法一次。
我會嘗試再次重新創建此問題並添加完整跟蹤。
打開跟蹤。顯示更多的代碼 - 你有什麼是不足以告訴可能發生的事情。 – Pawel
@Pawel完成。我會添加一些更多信息,如稍後(1或4天)跟蹤。 –