发出异步Rest请求
本文关键字:请求 Rest 异步 | 更新日期: 2023-09-27 18:15:01
我正在使用RestSharp在Windows Phone上进行一些Rest请求。
但是我正在努力使用"Aync/await"与我使用的函数:
例如:
private void Function()
{
var client = new RestSharp.RestClient("https://exampleapi.com");
client.Authenticator = [....]
var request = new RestSharp.RestRequest("/example.json", Method.GET);
try
{
client.ExecuteAsync(request, reponse =>
{
if (reponse.StatusCode == HttpStatusCode.OK)
{
// Operations with the json...
}
else
{
MessageBox.Show("Error");
}
});
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
我试着像这样添加单词async
:
private async void restsharptest()
{
var client = new RestSharp.RestClient("https://exampleapi.com");
client.Authenticator = [....]
var request = new RestSharp.RestRequest("/example.json", Method.GET);
try
{
client.ExecuteAsync(request, reponse =>
{
if (reponse.StatusCode == HttpStatusCode.OK)
{
var timeline = JsonConvert.DeserializeObject<List<dynamic>>(reponse.Content);
}
else
{
MessageBox.Show("Error");
}
});
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
但是当我尝试添加await:
var timeline = await JsonConvert.DeserializeObject<List<dynamic>>(reponse.Content);
得到以下错误:
无法访问'System.Collections.Generic.List '
和:
Operator 'await'只能在lambda表达式async中使用。马克这个带有lambda表达式修饰符'async'。
我如何使用async/await
我的"Function1" ?
编辑:
client.ExecuteAsync(request, response =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
List_ = new List<Myobject>();
List_ = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<List<Myobject>>(response.Content));
tcs.SetResult(RefreshList_);
}
else
{
MessageBox.Show("Error");
}
});
我又出现了这个错误:
Operator 'await'只能在lambda表达式async中使用。马克这个带有lambda表达式修饰符'async'。
如何解决这个问题?
为了使用async,你应该这样做:
private async void Function()
{
var client = new RestSharp.RestClient("https://exampleapi.com");
client.Authenticator = [....]
var request = new RestSharp.RestRequest("/example.json", Method.GET);
try
{
var response = await client.ExecuteTaskAsync(request);
if (reponse.StatusCode == HttpStatusCode.OK)
{
// Operations with the json...
}
else
{
MessageBox.Show("Error");
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
注意你的ExecuteAsync
和ExecuteTaskAsync
与await before之间的区别
对于返回类型为Task
或Task<T>
(特殊情况下为void
)的标记为async
的方法,您只能await
(等待)完成。async
关键字允许在/lambda方法中使用await
关键字。
将lambda标记为async
class.Method(() => { /* Do something sync*/ };
class.Method(async () => { /* Do something async */ };
你可以这样写
{
...
var client = new RestClient(serviceBaseUrl);
var request = new RestRequest(serviceUrl, Method.GET);
var content = await client.ExecuteTaskAsync(request);
var somethingToReturn = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<List<MyClass>>(content));
...
}