如果我称这种方法(1.)没有任何反应,我不知道为什么。 如果我只是调用model.TestConnection(null);没有结果我点击了断点1,但后来我不等待结果。
所以,为什么没有'当我调用model.TestConnection(null)时,我点击任何断点.Result? 当我刚调用model.TestConnection(null);?
时,我为什么要点击它们方法GetUrl调用SendRequestAsync并等待结果,然后返回其内容。 这一切都是作为一项任务发生的,因此您可以等待GetUrl获取内容。但是我的方面似乎对任务并行库(TPL)存在很大的误解。
var result = model.TestConnection(null).Result;
public class CcuMockModel : CcuModelBase, ICcuModel
{
public Task<CheckLoginResult> TestConnection(string url)
{
return GetUrl(@"http://localhost:8080/api/getObjects");
}
}
public class CcuModelBase
{
public async Task<CheckLoginResult> GetUrl(string url)
{
var aHBPF = new HttpBaseProtocolFilter();
aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired);
aHBPF.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
var client = new HttpClient(aHBPF);
var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));
HttpResponseMessage response;
try
{
response = await client.SendRequestAsync(request);
// Breakpoint 1
return new CheckLoginResult()
{
Content = response.Content.ToString(),
Status = CheckLoginResult.ErrorCode.Ok
};
}
catch (Exception ex)
{
}
// Breakpoint 2
return new CheckLoginResult() {Status = CheckLoginResult.ErrorCode.Failed};
}
}
答案 0 :(得分:1)
Thx Lee for the Link http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html 这令人兴奋,并帮助我理解任务,异步和等待。
我用
阻止了我的任务var result = model.TestConnection(null).Result;
现在我等待,一切正常。
private async static void Testing()
{
var result = await model.TestConnection(null);
}