我不熟悉.NET中的线程。
我有一个ansync方法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在我的休息调用结果返回之前完成。
在这种情况下如何正确使用线程?
调用异步方法的方法。
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;
}
}
答案 0 :(得分:0)
如果您可以将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>>
以接收您的休息服务调用的结果,并使用以下语句。
Dictionary<string, string> dict = await rest.MyTest();
如果没有,请查看一些解决方法,例如使用GetAwaiter().GetResult()
,但正如此问题Is .GetAwaiter().GetResult(); safe for general use?中所述,它可能会导致一些问题,因此最好的选择是让您的调用代码也异步。