2

我有一个带有这样签名的方法:

internal async static Task<string> Get()
{
   var SqlCon = await InitializeConnection();
   return "Foo";
}

我这样称呼这个方法:

var x = Get().Result;

其他方法说明

internal async static Task<SqlConnection> InitializeConnection()
{
        SqlConnection sc;
        sc = new SqlConnection();            
        sc.ConnectionString = @"Data Source=.\MSSQL;Initial Catalog=MyDB;Integrated Security=True;Async=True";                                  
         await sc.OpenAsync();//on this line the program long waits and doesn't connect

        return sc;
    }  

我在不使用异步的情况下检查了不同的正确连接线,一切正常。如何解决?谢谢你。

4

1 回答 1

2

您可能会使用Result. 你应该await改用。

我在我的博客上详细解释了这个僵局。本质上,有许多上下文(例如 UI 或 ASP.NET 上下文)一次只允许一个线程执行。默认情况下,await将捕获一个上下文并在该上下文中恢复该async方法的其余部分。因此,通过调用(同步)阻塞该上下文中的线程Result,您将阻止该async方法完成。

于 2013-08-27T19:39:03.573 回答