异步JSON反序列化

我需要执行RestRequest并获取一些JSON,因此我不确定我的方法是否真正异步,因为使用此方法时,UI仍然有些冻结。

 public async Task<List<MyObject>> Load() 

{

var tcs = new TaskCompletionSource<List<Myobject>>();

var client = new RestSharp.RestClient("https://exampleapi.com");

client.Authenticator = OAuth1Authenticator.ForProtectedResource(

[...]);

var request = new RestSharp.RestRequest("examp.json", Method.GET);

client.ExecuteAsync(request, response =>

{

if (response.StatusCode == HttpStatusCode.OK)

{

List_ = new List<MyObject>();

List_ = JsonConvert.DeserializeObject<List<MyObject>>(response.Content);

tcs.SetResult(List_);

}

else

{

MessageBox.Show("Error");

}

});

return await tcs.Task;

}

特别针对以下代码行:

List_ = JsonConvert.DeserializeObject<List<MyObject>>(response.Content);

真的不同步吗?因为它似乎阻塞了UI。您能告诉我如何使此函数正确异步吗?

回答:

似乎作为参数传递给的委托ExecuteAsync正在UI线程上执行。如果是这种情况,只需使用Task.Run即可在线程池上运行委托。

client.ExecuteAsync(request, async (response) =>

{

if (response.StatusCode == HttpStatusCode.OK)

{

var list = await Task.Run( () => JsonConvert.DeserializeObject<List<MyObject>>(response.Content));

tcs.SetResult(list);

}

else

{

MessageBox.Show("Error");

}

});

List_田野吗?在我看来,它应该是局部变量。另外,在反序列化json之前,无需使用空列表对其进行初始化。

以上是 异步JSON反序列化 的全部内容, 来源链接: utcz.com/qa/400347.html

回到顶部