递归调用异步异步/等待方法

时间:2016-12-28 22:25:53

标签: c# asp.net asynchronous recursion async-await

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),但这似乎有点&#39;缺憾。

2 个答案:

答案 0 :(得分:2)

  

此版本是否会异步运行?

  

我想添加一个Task.Delay(1000),但这似乎有点'kludgy。

是的,不要那样做。除非您因某种原因 (例如远程服务的速率限制)。

答案 1 :(得分:0)

  

除非我错过了一些明显的东西,否则这应该是同步的。

它无法同步工作。为什么同步工作?该方法本身是异步的,您可以await它,这是一个异步操作。

  

如何以异步方式运行它?

做你已经做过的事。