Csharp/C#教程:等待运算符出错分享


等待运算符出错

我的代码有问题。 我怎么解决这个问题? 等待运算符中存在此问题。

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 。 你不能这样做 – 构造函数总是同步的。

您只能在方法或匿名函数中使用asyncasync修饰符; 你不能将该修饰符应用于构造函数。

解决这个问题的一种方法是创建一个静态异步方法来创建一个实例 – 这将完成所有相关的等待,然后将结果传递给一个简单的同步构造函数。 当然,你的呼叫者需要适当地处理这个问题。

 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

(0)
上一篇 2022年1月13日
下一篇 2022年1月13日

精彩推荐