簡體   English   中英

C#MongoDB驅動程序2.2異步方法

[英]C# MongoDB Driver 2.2 Async Methods

我對MongoDB CSharp驅動程序比較陌生。 我以前沒有使用過異步方法。 我已經創建了一個ASP.NET MVC項目,並且正在使用MongoDB來存儲數據。 我的數據存儲庫位於一個完全獨立的項目中。 我得到的記錄如下:

namespace PostBoard.Data 
{
  public class PostDataRepository 
  {

    private IMongoDatabase db = null;

    public PostDataRepository() 
    {

    }
    public PostDataRepository(IMongoDatabase mongoDb) 
    {
      db = mongoDb;

    }



    public IList<Post> GetAllPosts() 
    {
      List<Post> _postQueryable = GetAllPostsFromDb().Result;
      return _postQueryable;
    }

    public async Task<List<Post>> GetAllPostsFromDb() 
    {
      IMongoCollection<Post> _postCollection = db.GetCollection<Post> ("userpost");


      SortDefinitionBuilder<Post> sortBy = Builders<Post>.Sort;
      SortDefinition <Post> sort = sortBy.Descending(x => x.PostDate);
      Task <List<Post>> _postTask = await Task.FromResult<Task<List< Post>>> (_postCollection.Find <Post> (_ => true).Sort(sort).ToListAsync());

      return _postTask.Result;
    }
  }
}

我在MVC控制器中調用GetAllPosts函數,並且工作正常。 但是,如果我將GetallPostsFromDb()更改為(類似於以下內容),則它將不起作用。

public async Task <List<Post>> GetAllPostsFromDb() 
{
  IMongoCollection <Post> _postCollection = db.GetCollection <Post> ("userpost");


  SortDefinitionBuilder <Post> sortBy = Builders<Post>.Sort;
  SortDefinition<Post> sort = sortBy.Descending(x => x.PostDate);
  List <Post> _postTask = await _postCollection.Find <Post> (_ => true).Sort(sort).ToListAsync();

  return _postTask;
}

我已經看到了一些示例,並且似乎是第二種方法是正確的方法,但是當我使用它時,我的網頁似乎停留在“等待回復”模式下。

使GetAllPosts()為異步方法,然后等待您對GetAllPostsFromDb()調用。 這將返回一個List<Posts>對象。

public async IList<Post> GetAllPosts() 
{
    List<Post> _postQueryable = await GetAllPostsFromDb();
    return _postQueryable;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM