2015-07-11 95 views
2

我是SignalR中的新成員。無法在SignalR中將類型'System.Threading.Tasks.Task <object>'隱式轉換爲'string'

我的項目是調用signalR和sql依賴關係的sql更改。

這是用來C# corner

每一件事情是確定的,但我通過這個代碼

enter image description here

  using (var connection = new SqlConnection("Server=.;Database=fidilio;Trusted_Connection=True;")) 
     { 
      const string query = "SELECT Count(*) FROM [dbo].[MemberComment]"; 

      connection.Open(); 
      using (var command = new SqlCommand(query, connection)) 
      {     
       command.Notification = null;     
       var dt = new DataTable(); 
       var dependency = new SqlDependency(command); 
       dependency.OnChange += dependency_OnChange; 
       if (connection.State == ConnectionState.Closed) 
        connection.Open();     
       var reader = command.ExecuteScalar(); 

       commentCount = Int16.Parse((reader.ToString())); 
      } 
     } 
     var context = GlobalHost.ConnectionManager.GetHubContext<NotficationHub>(); 

     return context.Clients.All.RecevieNotification(commentCount); 

得到異常的示例代碼有什麼想法?

+1

請確保在帖子中以內嵌文本的形式提供演示問題的代碼。 –

+0

請勿將外部資源的鏈接用作您帖子的關鍵元素。外部資源可以並經常改變,或完全消失,使任何內容失效,例如引用它們的問題或答案。堆棧溢出問題應該是完全獨立的。請_do_包含[良好,_minimal_,_complete_代碼示例](https://stackoverflow.com/help/mcve),可以可靠地重現問題。 –

回答

3

不幸的是,您發佈的代碼是不完整的,遠非清晰,沒關係實用。請注意,例如,發佈爲實際代碼的代碼實際上並不匹配您發佈爲位圖的代碼。

(請注意,位圖,特別是那些描述仍然顯示爲「enter image description here」的位圖,不能以任何有意義的方式通過網站自己的搜索功能或像Bing這樣的搜索引擎和谷歌)。

但是,您得到的特定例外是非常典型的誤用async方法。在我看來,你可以得到的代碼通過改變return語句的工作,看起來像這樣:

return (string)context.Clients.All.RecevieNotification(commentCount).Result; 

(這是從你的問題...複製/粘貼的文本版本的代碼也更容易比試圖從位圖重新輸入一些東西,我認爲如果需要的話,你可以將上面的改變適應位圖中的代碼)。

需要注意的是,如果實際執行解決問題,那麼你真的應該要做的就是改變方法包含return語句是async Task<string>,改變return語句是:

return (string)(await context.Clients.All.RecevieNotification(commentCount)); 

但這樣做只會促使需要使用await備份到調用方法以及該方法的調用方,依此類推,直到遇到線程或UI事件中的任何頂級方法開始整個過程​​。

真的是正確的做法,但這裏沒有足夠的上下文來解釋如何以任何特定的方式做到這一點。如果您決定以這種方式修復您的代碼,並且需要幫助,弄清楚如何正確地讓您的代碼async意識到,請發佈一個新問題,確保包含明確可靠地說明該問題的a good, minimal, complete code example

相關問題