title: Difference between Find and FindAsync
body: <p>I am writing a very, very simple query which just gets a document from a collection according to its unique Id.  After some frusteration (I am new to mongo and the async / await programming model), I figured this out:</p>
  
  <pre><code>IMongoCollection&lt;TModel&gt; collection = // ...
  FindOptions&lt;TModel&gt; options = new FindOptions&lt;TModel&gt; { Limit = 1 };
  IAsyncCursor&lt;TModel&gt; task = await collection.FindAsync(x =&gt; x.Id.Equals(id), options);
  List&lt;TModel&gt; list = await task.ToListAsync();
  TModel result = list.FirstOrDefault();
  return result;
  </code></pre>
  
  <p>It works, great!  But I keep seeing references to a "Find" method, and I worked this out:</p>
  
  <pre><code>IMongoCollection&lt;TModel&gt; collection = // ...
  IFindFluent&lt;TModel, TModel&gt; findFluent = collection.Find(x =&gt; x.Id == id);
  findFluent = findFluent.Limit(1);
  TModel result = await findFluent.FirstOrDefaultAsync();
  return result;
  </code></pre>
  
  <p>As it turns out, this too works, great!</p>
  
  <p>I'm sure that there's some important reason that we have two different ways to achieve these results.  What is the difference between these methodologies, and why should I choose one over the other?</p>