我是 SignalR 的新手。
我的项目是在 signalR 和 sql 依赖项上提出 sql 更改。
这是使用C# 角的示例代码
一切都很好,但我通过这段代码得到了例外

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);
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
不幸的是,您发布的代码不完整且不清晰,更不用说有用了。请注意,例如,作为实际代码发布的代码实际上与您作为位图发布的代码不匹配。
(还请记住,位图,尤其是那些描述仍为“在此处输入图像描述”的位图,无法通过网站自己的搜索功能等工具或 Bing 和 Google 等搜索引擎以任何有意义的方式进行搜索)。
但是,您得到的特定异常是非常典型的async方法误用。在我看来,您可以通过将 return 语句更改为如下所示来使代码工作:
return (string)context.Clients.All.RecevieNotification(commentCount).Result;
Run Code Online (Sandbox Code Playgroud)
(这是您问题的文本版本中的代码......复制/粘贴也比尝试从位图中重新键入内容更容易。我认为如果需要,您可以将上述更改调整为位图中的代码)。
请注意,如果这确实解决了问题,那么您真正应该做的是将包含该 return 语句的方法更改为async Task<string>,并将 return 语句更改为:
return (string)(await context.Clients.All.RecevieNotification(commentCount));
Run Code Online (Sandbox Code Playgroud)
但是这样做只会将使用需求推await回到调用方法和该方法的调用者,等等,直到您到达线程中的任何顶级方法或 UI 事件启动了整个过程。
这是真的做正确的事情,但这里有没有足够的上下文来解释如何做,在任何特定的方式。如果您确实决定以这种方式修复您的代码,并且需要帮助弄清楚如何正确地使您的代码async感知,请发布一个新问题,确保包含一个好的、最小的、完整的代码示例,该示例清楚可靠地说明了该问题.
| 归档时间: |
|
| 查看次数: |
14986 次 |
| 最近记录: |