Tôi thực sự đã bắt đầu một đêm cố gắng tìm hiểu thêm về MongoDB, nhưng tôi đang bị treo lên và các công cụ .NET đang chờ đợi/không đồng bộ. Tôi đang cố gắng triển khai mã hiển thị trên site của MongoDB. Tôi đã phải sửa đổi nó một chút chút, vì vậy tôi có thể nhận được chương trình của tôi để biên dịch. Tôi biết có ứng dụng bảng điều khiển sau của tôi.Tại sao tôi không thể gỡ lỗi mã bằng một phương thức không đồng bộ?
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
}
Khi tôi chạy ứng dụng, trình gỡ lỗi sẽ gọi vào phương thức GetDataAsync() của nó để gọi phương thức GetData(). Nó được đưa vào dòng "using (var cursor = await collection.FindAsync (filter))" và sau đó ngay lập tức trả về để kết thúc phương thức main().
Bất kỳ điểm ngắt nào tôi đặt bên dưới dòng đó đều bị bỏ qua, cũng như bất kỳ điểm ngắt nào tôi đặt trong phương thức GetDataAsync(). Có phải mã này không được chạy vì chương trình thoát không? Ai đó có thể giải thích cho tôi chuyện gì đang diễn ra không?
Tôi đã thử điều đó, nhưng tôi vừa kết thúc với lỗi biên dịch là "Toán tử". không thể được áp dụng cho toán hạng của loại 'void' " – Dave
Tôi đã cập nhật câu trả lời của mình, nó phải là ok :) –
Tuyệt vời! nó hiện đang hoạt động. Cảm ơn bạn đã giúp đỡ! – Dave