如何在异步任务方法之外使用局部变量?

时间:2017-08-12 17:21:13

标签: c# async-await

我如何分配" ip"在这个方法之外?这是我第一次在这里问一个问题。

public async Task GetIPAsync()
{
    var client = new HttpClient();
    string response = await client.GetStringAsync(new Uri("https://www.meethue.com/api/nupnp"));
    string ip = JArray.Parse(response).First["internalipaddress"].ToString();        
}

2 个答案:

答案 0 :(得分:3)

public async Task<string> GetIPAsync()
{
    var client = new HttpClient();
    string response = await client.GetStringAsync(new Uri("https://www.meethue.com/api/nupnp"));
    string ip = JArray.Parse(response).First["internalipaddress"].ToString();
    return ip;
}

// Then to call it, do:
string ip = await GetIPAsync();

答案 1 :(得分:0)

根据您的评论:

  

我希望ip成为一个班级变量

然后使它成为一个类级变量。例如:

private string ip;

public async Task GetIPAsync()
{
    var client = new HttpClient();
    string response = await client.GetStringAsync(new Uri("https://www.meethue.com/api/nupnp"));
    ip = JArray.Parse(response).First["internalipaddress"].ToString();        
}

这会增加ip变量的范围,使其可用于该类中的其他实例方法。

(当然注意,这个类级变量的状态将与异步操作中的事件序列联系起来。这个时候有点超出了你在问题中展示的范围。)

(另请注意,这个方法可能比在这个问题上简单返回值which was answered elsewhere更不直观。“GetSomething”方法是我希望返回值的东西。返回该值,您可以更好地控制该值的范围以及该方法的重用安全性。如果您希望该值为类级别,那么您就是这样做的但这可能不是你实际建设的最佳方法。)