等待运算符出错
我的代码有问题。 我怎么解决这个问题? 等待运算符中存在此问题。
public MyModel() { HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("https://api.vkontakte.ru/method/video.get?uid=219171498&access_token=d61b93dfded2a37dfcfa63779efdb149653292636cac442e53dae9ba6a049a75637143e318cc79e826149"); string googleSearchText = await response.Content.ReadAsStringAsync(); JObject googleSearch = JObject.Parse(googleSearchText); IList results = googleSearch["response"].Children().Skip(1).ToList(); IList searchResults = new List(); foreach (JToken result in results) { MainPage1 searchResult = JsonConvert.DeserializeObject(result.ToString()); searchResults.Add(searchResult); }
你试图在构造函数中使用await
。 你不能这样做 – 构造函数总是同步的。
您只能在方法或匿名函数中使用async
和async
修饰符; 你不能将该修饰符应用于构造函数。
解决这个问题的一种方法是创建一个静态异步方法来创建一个实例 – 这将完成所有相关的等待,然后将结果传递给一个简单的同步构造函数。 当然,你的呼叫者需要适当地处理这个问题。
public static async Task CreateInstance() { string googleSearchText; using (HttpClient client = new HttpClient()) { using (HttpResponseMessage response = await client.GetAsync(...)) { googleSearchText = await response.Content.ReadAsStringAsync(); } } // Synchronous constructor to do the rest... return new MyModel(googleSearchText); }
您不能在类的构造函数中使用await。
异步方法返回一个可以执行异步的Task
对象。 构造函数没有返回类型,因此无法返回Task
对象,因此无法等待。
解决此问题的一个简单方法是创建一个Init函数:
public MyModel() { } public async Task Init() { HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync("https://api.vkontakte.ru/method/video.get?uid=219171498&access_token=d61b93dfded2a37dfcfa63779efdb149653292636cac442e53dae9ba6a049a75637143e318cc79e826149"); string googleSearchText = await response.Content.ReadAsStringAsync(); JObject googleSearch = JObject.Parse(googleSearchText); IList results = googleSearch["response"].Children().Skip(1).ToList(); IList searchResults = new List (); foreach (JToken result in results) { MainPage1 searchResult = JsonConvert.DeserializeObject (result.ToString()); searchResults.Add(searchResult); } }
然后在创建模型时:
上述就是C#学习教程:等待运算符出错分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
var model = new MyModel(); await model.Init();
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1030814.html