Я немного использовал асинхронное кодирование, но я действительно не совсем понимаю, как его использовать, хотя я понимаю концепцию и зачем мне это нужно.Хотите понять async
Вот мой набор вверх:
У меня есть веб-API, который я буду называть из моего приложения ASP.NET MVC, и мой Web API будет вызывать DocumentDB. В образцах кода я вижу много ожидающих ключевых слов при отправке запросов в DocumentDB.
Я смущен, если мне нужно сделать мой метод действия индекса в моем асинхронном приложении MVC? Я также смущен, если мой метод CreateEmployee() в моем веб-API должен быть асинхронным?
Каков правильный способ использования async в этом сценарии?
Вот мой код (этот код в настоящее время дает мне ошибки, потому что мой метод действия MVC не является асинхронным) ---- ASP.NET MVC App Code ----
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);
}
---- Web API 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;
}
В вашем случае вы освобождаете некоторые ресурсы, когда говорите, ожидаете. Однако вы можете улучшить с помощью tasks.whenall - прочитайте это: http://msdn.microsoft.com/en-AU/library/hh556530.aspx – codebased