如何调用异步方法
本文关键字:异步方法 调用 何调用 | 更新日期: 2023-09-27 18:16:05
我不熟悉。net中的线程。
我有一个同步方法MyTest:
public async Task MyTest() {
using (HttpClient httpClient = new HttpClient()) {
httpClient.BaseAddress = new Uri(_uri);
var response = await httpClient.GetAsync("API/GetData");
if(response!=null && response.IsSuccessStatusCode) {
var json = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
}
}
}
我遇到的问题是调用方法来获取结果(字典)。
当我遍历我的代码时,我看到IsCompleted在我的rest调用返回结果之前完成。
在这种情况下如何正确使用线程?
调用async方法的方法。
public void GetTestData()
{
try
{
ARestService rest = new ARestService();
Task tsk = new Task(rest.MyTest);
if (tsk.IsCompleted)
{
var tst = "Done?";
}
}
catch(Exception ex)
{
string a = ex.Message;
}
}
如果您可以将GetTestData
方法转换为async
方法,只需执行以下操作。
public async Task GetTestData()
{
try
{
ARestService rest = new ARestService();
await rest.MyTest();
var tst = "Done?";
}
catch(Exception ex)
{
string a = ex.Message;
}
}
你还应该定义你的方法返回一个Task<Dictionary<string, string>>
来接收你的rest服务调用的结果,使用下面的语句。
Dictionary<string, string> dict = await rest.MyTest();
如果没有,请查看一些变通方法,例如使用GetAwaiter().GetResult()
,但正如本问题所解释的那样是.GetAwaiter().GetResult();一般使用安全吗?这可能会导致一些问题,所以最好的选择是让你的调用代码也是异步的。