【发布时间】:2017-03-17 05:43:23
【问题描述】:
我不熟悉 .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 在结果从我的休息调用返回之前完成。
在这种情况下如何正确使用线程?
我调用异步方法的方法。
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;
}
}
【问题讨论】:
-
请随意阅读一些关于 async/await 的教程,而不是在黑暗中摸索。
-
只需调用它并等待结果。或者直接等待。该方法是异步的,因为 .ReadAsStringAsync 已经是异步的并且在后台运行。该方法返回一个已经在运行的任务,你只需要等待
-
如果您希望它是异步的(线程在等待 IO 时不会阻塞),您想要的是
await它,或者您可以在任务上调用Result或Wait同步阻塞线程。 -
NOT a duplicate,这个问题是关于
async void,一个非常特殊的情况。
标签: c#