我正在启动HubConnection。首先,我得到一个新的HubConnection实例, 之后我创建了一个名为“fileHub”的新IHubProxy,到目前为止还不错。
我的问题位于(或在)等待的函数ContinueWith,我尝试启动Connection,并在开始成功与否时写入控制台。 connection.Start()成功,“Connected”被写入控制台。 在执行Console.WriteLine(“已连接”)之后添加的代码也没有问题。
但是任务永远不会完成,因此调用HandleSignalRAsync()方法的客户端类等待完成失败。
添加回报;或task.dispose();并没有解决我的问题。
public static async Task HandleSignalRAsync()
{
connection = new HubConnection("http://localhost:12754");
myHub = connection.CreateHubProxy("fileHub");
await connection.Start().ContinueWith(
task =>
{
if (task.IsFaulted)
{
var ex = task.Exception.GetBaseException();
Console.WriteLine("There was an error opening the connection: {0}", ex);
}
else
{
Console.WriteLine("Connected");
}
});
}
我在另一个解决方案类中使用TaskAwaiter调用Method:
Functions.HandleSignalRAsync().GetAwaiter().GetResult();
用以下方式调用它:
Functions.HandleSignalRAsync().Wait();
也不起作用。
答案 0 :(得分:2)
但是任务永远不会完成
因为两个示例同步阻止,导致代码死锁。你不应该是blocking on async code。
您需要正确地异步等待HandleSignalRAsync
:
await Functions.HandleSignalRAsync().ConfigureAwait(false);
如果您已经在使用async-await
,那么使用ContinueWith
的延续样式没有任何优势,您可以简单地将执行包装在try-catch
语句中并await
内:
try
{
await connection.Start().ConfigureAwait(false);
Console.WriteLine("Connected");
}
catch (Exception e)
{
Console.WriteLine("There was an error opening the connection: {0}", e);
}