私は実際にMongoDBについてもっと学びたいと思って夜を始めましたが、ハングアップして、.NETが待っている/非同期のものです。私は、MongoDBのsiteに示されているコードを実装しようとしています。私はちょっと修正する必要があったので、私のプログラムをコンパイルすることができました。私は次のコンソールアプリケーションを持っていることを知っています。非同期メソッドでコードをデバッグできないのはなぜですか?
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
}
私はアプリケーションを実行すると、デバッガは順番にGetDataメソッド()メソッドを呼び出し、私のGetDataAsync()メソッドを呼び出します。 "using(var cursor = await collection.FindAsync(filter))"という行に移動し、すぐにmain()メソッドを終了します。
私がその行の下に置いたブレークポイントは、GetDataAsync()メソッドに設定したブレークポイントと同様に無視されます。プログラムが終了するので、このコードは実行されませんか?誰かが何が起こっているか私に説明することはできますか?
私はそれを試みましたが、私はちょうど "オペレータ 'のコンパイルエラーで終了します。 'void'型のオペランドには適用できません " – Dave
私は自分の答えを更新しました。それは大丈夫です。 –
素晴らしい!それは今働いている。ご協力いただきありがとうございます! – Dave