我实际上在尝试学习更多关于MongoDB的知识,但在.NET的await/async方面遇到了一些问题。我正试图实现MongoDB官网 上的代码,但需要稍作修改以便程序能够编译通过。我现在在我的控制台应用程序中有以下内容:
protected static IMongoClient _client;
protected static IMongoDatabase _database;
static void Main(string[] args)
{
_client = new MongoClient();
_database = _client.GetDatabase("test");
GetDataAsync();
}
private static async void GetDataAsync() //method added by me.
{
int x = await GetData();
}
private static async Task<int> GetData()
{
var collection = _database.GetCollection<BsonDocument>("restaurants");
var filter = new BsonDocument();
var count = 0;
Func<int> task = () => count; //added by me.
var result = new Task<int>(task); //added by me.
using (var cursor = await collection.FindAsync(filter)) //Debugger immediately exits here, goes back to main() and then terminates.
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
// process document
count++;
}
}
}
return count; //added by me
}
当我运行应用程序时,调试器会调用我的GetDataAsync()
方法,该方法反过来又调用GetData()
方法。它到达using (var cursor = await collection.FindAsync(filter))
这一行,然后立即返回以完成main()
方法。此行以下的任何断点都将被忽略,以及我放置在
GetDataAsync()
方法中的任何断点。这段代码是否因程序退出而未运行?有人能解释一下发生了什么吗?