2016-12-28 7 views
-1
private bool _secondRequest; 

public async Task<UserModel> RunSomeMethodAsync(UserModel model, bool mode = true) 
{ 
    // Some code here... 

    HttpClient client = new HttpClient(); 

    var response = await client.SendAsync(request);    
    var responseContent = await response.Content.ReadAsStringAsync(); 

    if (responseContent != "[]\r") 
    { 
     return await ProcessThisStringAsync(responseContent); 
    { 
    else if (responseContent == "[]\n" && !_secondRequest) 
    { 
     _secondRequest = true; 
     await RunSomeMethodAsync(model, false) // Run same method, different param 
    } 

    return model.Error = "An error has occurred"; 
} 

Если я пропустил что-то очевидное, это должно работать с использованием синхронного кода. Будет ли эта версия работать асинхронно? Я подумал о добавлении Task.Delay (1000), но это выглядело как-то вроде kludgy.Вызов метода асинхронной асинхронной/ожидаемой рекурсии

+0

Вы хотите, чтобы вы запускали его параллельно? Это уже асинхронно. – Rob

+0

Я хочу дождаться первого ответа, и он не пуст, обработайте его и остановитесь. Если пусто, измените параметр и запустите его снова, чтобы получить второй ответ и обработайте его. –

+0

Так оно и будет. Я заметил, что вы возвращаете строку, когда вы должны возвращать модель (и то же самое относится к ее рекурсивному вызову - возможно, вы хотите, чтобы 'return ожидал RunSomeMethodAsync (model, false)'). В какой проблеме вы столкнулись? Это будет сделано так же, как вы говорите, как только ошибки компиляции будут устранены. – Rob

ответ

2

Будет ли эта версия работать асинхронно?

Да.

Я думал о добавлении Task.Delay (1000), но это казалось любопытным «kludgy».

Да, не делайте этого. Если у вас есть по какой-либо причине (например, ограничения скорости на удаленной службе).

+0

Эй, хорошо поймать ... Я обнаружил, что дистанционное обслуживание ограничивало меня, и поэтому у меня были проблемы. Необходимо немного замедлить его, но оставить асинхронный код на месте. –

0

Если я пропустил что-то очевидное, это должно работать синхронно.

Не работает синхронно. Почему будет работает синхронно? Сам метод асинхронен, и вы используете его как асинхронную операцию.

Что делать, чтобы запустить его асинхронно?

Выполняйте то, что вы уже делаете.

+0

Я имел в виду синхронную версию рабочего процесса. Меня немного беспокоило, будет ли асинхронная версия. –

+0

@FredChateau Какой рабочий процесс? И почему это будет работать синхронно? – Servy

+0

Если вы удалите весь асинхронный код (async/await), он сделает то, что он должен делать синхронно. Мне несколько легче понять или, по крайней мере, визуализировать, как происходит один шаг, то следующий шаг следует после завершения первого шага. Наверное, у меня нет хорошего чувства к ожиданию, потому что я был обеспокоен тем, что не будет ждать, пока начнется второй запрос, пока не будет завершен первый запрос. И эта любопытная проблема была у меня. Второй запрос начался так быстро, что его заблокировал удаленный сервис - дань эффективности асинхронного кода. –

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