2016-06-21 3 views
-1

Я работаю над приложением Windows Phone. При вызове функции ниже, после выполнения этой строки: HttpResponseMessage response = await client.GetAsync(connection1).ConfigureAwait(false); он пропускает остальную часть кода, а элемент управления переходит к родительской функции и выполняет оставшуюся часть кода и снова возвращается к этой функции. Как решить эту проблему?Проблема с вызовом функции Async

public async void vehicleValidation()  
{ 
    //isValidVehicle = true; 
    var client = new System.Net.Http.HttpClient(); 
    //string connection = "http://mymlcp.co.in/mlcpapp/get_slot.php?vehiclenumber=KL07BQ973"; 
    string connection1 = string.Format("http://mymlcp.co.in/mlcpapp/?tag=GetIsValidUser&employeeId={0}&name={1}",txtVeh.Text,"abc"); 
    HttpResponseMessage response = await client.GetAsync(connection1).ConfigureAwait(false); 
    //var response = await client.GetAsync(connection1); 
    // HttpResponseMessage response = client.GetAsync(connection1).Result; 
    var cont = await response.Content.ReadAsStringAsync(); 
    var floorObj = Newtonsoft.Json.Linq.JObject.Parse(cont); 
    //var resp = await (new MLCPClient()).GetIsValidUser(txtVeh.Text, "xyz"); 

    if (String.IsNullOrEmpty(floorObj["error"].ToString()) || floorObj["error"].ToString().Equals("true")) 
    { 
     isValidVehicle = false; 
    } 
    else 
    { 

     isValidVehicle = true; 
    } 
} 
+0

отметить, что управление возвращается к вызывающему абоненту, когда вам нужно ждать что-то * точно * что вы должны ожидать с помощью метода async. Это в два раза. –

+0

Я не думаю, что вы должны использовать 'ConfigureAwait (false)', поскольку он вызывает проблемы с синхронизацией. – Venky

+0

@jonSkeet Можете ли вы объяснить? –

ответ

1

Вы никогда не должны async void, если вы пишете обработчик событий, вам нужно сделать ваши функции возвращают Task и затем await функцию в вашей родительской функции.

Read «Async/Await - Best Practices in Asynchronous Programming» для внедрения на передовой практике, как никогда не делал async void и сделать свой код «асинхронной все пути»

+0

Также PascalCase следует использовать при методах именования. –

Смежные вопросы