Voulez comprendre async

J'ai utilisé asynchrone à coder un peu, mais je n'ai pas vraiment bien comprendre comment l'utiliser, même si je comprends le concept, et pourquoi j'en ai besoin.

Voici mon set up:

J'ai une API Web que je vais appeler à partir de mon ASP.NET MVC application et de mon site Web API appel DocumentDB. Dans les exemples de code, je vois que beaucoup attendent des mots-clés lors de l'envoi de requêtes de DocumentDB.

Je suis confus si j'ai besoin de faire mon Index, méthode d'action dans mon MVC application asynchrone?
Je suis aussi confus si mon CreateEmployee() la méthode dans mon Web API asynchrone?

Quelle est la bonne façon de l'utiliser asynchrone dans ce scénario?

Voici mon code (Ce code est actuellement en me donnant des erreurs parce que mon MVC méthode d'action n'est pas asynchrone)
---- ASP.NET MVC le Code de l'Application ----

public ActionResult Index()
{

   Employee emp = new Employee();
   emp.FirstName = "John";
   emp.LastName = "Doe";
   emp.Gender = "M";
   emp.Ssn = "123-45-6789";

   using (var client = new HttpClient())
   {
      client.BaseAddress = new Uri("http://myWebApi.com");
      client.DefaultRequestHeaders.Accept.Clear();
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

      HttpResponseMessage response = await client.PostAsJsonAsync("hr/create/newemployee", emp);
      if (response.IsSuccessStatusCode)
      {
         emp = await response.Content.ReadAsAsync<Employee>();
      }
   }

   //Display employee info
   return View(emp);
}

---- API Web Code ----

private static readonly string endPointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];
private static readonly string databaseId = ConfigurationManager.AppSettings["DatabaseId"];
private static DocumentClient client;

public static async Task<Employee> CreateEmployee(Employee emp)
{
   try
   {
      //Create a Document client
      using (client = new DocumentClient(new Uri(endPointUrl), authorizationKey))
      {
         //Get the database
         var database = await GetDatabaseAsync();

         //Get the Document Collection
         var collection = await GetCollectionAsync(database.SelfLink, "Employees");

         await client.CreateDocumentAsync(collection.SelfLink, emp);

         //Further process employee
       }
    }
    catch
    {
       //Handle error
    }

    return employee;
}

private static async Task<DocumentCollection> GetCollectionAsync(string dbLink, string id)
{
   DocumentCollection collection = client.CreateDocumentCollectionQuery(dbLink).Where(c => c.Id == id).ToArray().FirstOrDefault();

   return collection;
}

private static async Task<Database> GetDatabaseAsync()
{
   Database database = client.CreateDatabaseQuery().Where(db => db.Id == databaseId).ToArray().FirstOrDefault();

   return database;
}
Dans votre cas, vous libérant ainsi des ressources lorsque vous dites vous attendent. Cependant, vous pouvez l'améliorer en utilisant les tâches.whenall - merci de lire ceci: msdn.microsoft.com/en-AU/library/hh556530.aspx

OriginalL'auteur Sam | 2014-11-25