C# 无法在信号器中将类型“System.Threading.Tasks.Task”隐式转换为“string”

C# 无法在信号器中将类型“System.Threading.Tasks.Task”隐式转换为“string”,c#,signalr,C#,Signalr,我是新来的信号员 我的项目是在信号器和sql依赖项上实现sql更改 这是使用的示例代码 每件事都是好的,但我通过这个代码得到异常 using (var connection = new SqlConnection("Server=.;Database=fidilio;Trusted_Connection=True;")) { const string query = "SELECT Count(*) FROM [dbo].[MemberC

我是新来的信号员

我的项目是在信号器和sql依赖项上实现sql更改

这是使用的示例代码

每件事都是好的,但我通过这个代码得到异常

         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);

有什么想法吗?

不幸的是,您发布的代码不完整,也不清楚,更不用说有用了。例如,请注意,作为实际代码发布的代码实际上与作为位图发布的代码不匹配

还请记住,位图,尤其是那些描述仍在此处输入图像描述的位图,无法通过网站自身的搜索功能或Bing和Google等搜索引擎以任何有意义的方式进行搜索

然而,您得到的特定异常是滥用异步方法的典型情况。在我看来,通过将return语句更改为如下所示,可以让代码正常工作:

return (string)context.Clients.All.RecevieNotification(commentCount).Result;
这是问题文本版本中的代码…复制/粘贴也比尝试从位图中重新键入内容容易。我认为如果需要,您可以将上述更改调整为位图中的代码

请注意,如果这确实解决了问题,那么您真正应该做的是将包含该return语句的方法更改为async Task,并将return语句更改为:

return (string)(await context.Clients.All.RecevieNotification(commentCount));
但这样做只会将使用wait的需要推回到调用方法和该方法的调用方,等等,直到您找到线程或UI事件中启动整个过程的顶级方法


这确实是正确的做法,但这里没有足够的上下文来解释如何以任何具体方式做到这一点。如果您决定以这种方式修复代码,并且需要帮助了解如何正确地使代码具有异步意识,请发布一个新问题,请确保在文章中以内联文本的形式提供代码来演示问题。不要将外部资源的链接用作文章的关键元素。外部资源可以而且经常会发生变化,或者完全消失,使引用它们的任何内容(如问题或答案)无效。堆栈溢出问题应该是完全独立的。请务必包含可靠再现问题的信息。