Я пытаюсь получить данные с сервера, а потом мне нужно сделать несколько вещей с этими данными и другими функциями.Задача async и continuewith
Поскольку я получаю данные с сервера, я делал это с помощью async и continuewith functions.
Это мой код:
private void login(object sender, EventArgs eventArgs)
{
SharedFunctions.showHide("Show", pBar, txt);
result = false;
if (validateScreen())
{
Task task = new Task(() => LoginUser().ContinueWith((t) =>
{
afterLogin();
}));
task.Start();
}
}
private void afterLogin()
{
if (result)
{
SharedFunctions.saveDataOnDevice(userID, storeID, permission);
StartActivity(typeof(SplashScreen));
Finish();
}
else
{
SharedFunctions.showHide("Hide", pBar, txt);
SharedFunctions.showPopUp(this, GetString(Resource.String.error_login), GetString(Resource.String.wrong_name_and_password));
}
}
private async Task LoginUser()
{
string userName = uName.Text;
string password = pass.Text;
password = SharedFunctions.encrypt(password);
var client = new RestClient("........");
string resourceStr = @"api/base/....";
var request = new RestRequest(Method.POST)
{
Resource = resourceStr,
RequestFormat = DataFormat.Json
};
request.AddBody(new { UserName = userName, Password = password });
var response = await client.ExecuteTaskAsync<dynamic>(request);
var dt = response.Data;
if (dt != null)
{
userID = dt["ID"];
storeID = dt["StoreID"];
permission = dt["Permission"];
result = true;
}
else
result = false;
}
Моя главная проблема заключается в том, что после того, как я получаю данные, сразу же после этого кода: if (dt != null)
.
Когда я пытаюсь отладить код, он достигает строки с номером userID = dt["ID"];
, и даже до его выполнения он переходит к функции afterLogin()
.
Что мне нужно изменить в моем коде, чтобы запустить все функции перед тем, как перейти к следующему?
Заранее благодарю вас!
Как насчет включения разрыва при возникновении исключения при отладке. –
Почему вы используете 'ContinueWith' вместо' await'? –