我花了好几个小时试图调试这个,但没有运气。我正在使用Mongo 3.2和C#驱动程序。我已将问题简化为仍然显示问题的简化版本。
问题似乎是ToListAsync()永远不会返回。我已经尝试将LoginHelper函数更改为同步并检查ToListAsync()的值。结果验证操作返回正确的文档,确实如此。不知道为什么这个异步版本不起作用。
以下是代码:
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {}
[System.Web.Services.WebMethod]
public static async Task<string> LoginUser(string username, string password)
{
string userId = await LoginHelper(username, password);
if (userId != "N/A")
{
//Do some stuff here
}
return userId;
}
public static async Task<string> LoginHelper(string userName, string password)
{
var client = new MongoClient("mongodb://localhost");
var database = client.GetDatabase(_databaseName);
var collection = database.GetCollection<BsonDocument>("Users");
//This is the trouble line
//If I remove this line the code will run fine and I'll see "N/A" returned in the JavaScript that calls LoginUser WebMethod
var documents = await collection.Find(new BsonDocument()).ToListAsync();
//The code never reaches this point, the above await never returns
return "N/A";
}
}
答案 0 :(得分:0)
我已经通过将功能转移到WCF Web服务而不是使用Web方法解决了这个问题。我不确定为什么会这样,也许ASPX页面中的Webmethods与async不兼容。