编辑:我已在项目中使用Microsoft.Bcl.Async nuget包,但错误仍然存在。
我正在使用以下代码编写asnyc“确保URL是可访问的”方法:
public async Task<ConnectivityMonitorResult> TestModeUrlCheck(string url)
{
try
{
var filter = new HttpBaseProtocolFilter();
filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Expired);
filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Untrusted);
filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.InvalidName);
using (var httpClient = new Windows.Web.Http.HttpClient(filter))
{
var resp = await httpClient.GetAsync(new Uri(url), Windows.Web.Http.HttpCompletionOption.ResponseHeadersRead);
if (resp.IsSuccessStatusCode)
return new ConnectivityMonitorResult(ConnectivityType.Connected);
else
return new ConnectivityMonitorResult(ConnectivityType.NotConnected);
}
}
catch(Exception ex)
{
return new ConnectivityMonitorResult(ConnectivityType.NotConnected, "Unhandled error: " + ex.Message);
}
}
此方法适用于我的应用的“测试模式”。 (生产检查方法将因SSL证书错误而失败)。它将使用自签名证书来访问本地开发服务器。
问题是由于var resp = await
行上出现以下错误,因此无法构建此代码:
'IAsyncOperationWithProgress'确实如此 不包含'GetAwaiter'的定义和最佳扩展名 方法重载'AwaitExtensions.GetAwaiter(Task)'需要一个接收器 类型'任务'
我无法弄清楚如何正确构建GetAsync()调用以使其工作。
更新
这适用于使用便携式类库的Windows 8应用程序。我在项目的其他地方使用等待。我已将Microsoft.Bcl
和Microsoft.Bcl.Async
Nuget包添加到我的项目中。
更新
我尝试将代码更新为:
public async Task<ConnectivityMonitorResult> TestModeUrlCheck(string url)
{
try
{
var filter = new HttpBaseProtocolFilter();
filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Expired);
filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Untrusted);
filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.InvalidName);
using (var httpClient = new Windows.Web.Http.HttpClient(filter))
{
var resp = await Test(httpClient, url);
if (resp.IsSuccessStatusCode)
return new ConnectivityMonitorResult(ConnectivityType.Connected);
else
return new ConnectivityMonitorResult(ConnectivityType.NotConnected);
}
}
catch(Exception ex)
{
return new ConnectivityMonitorResult(ConnectivityType.NotConnected, "Unhandled error: " + ex.Message);
}
}
private async Task<Windows.Web.Http.HttpResponseMessage> Test(Windows.Web.Http.HttpClient client, string apiUrl)
{
var asyncOp = client.GetAsync(new Uri(apiUrl), Windows.Web.Http.HttpCompletionOption.ResponseHeadersRead);
return await Task.Run(() => asyncOp.GetResults());
}
它已编译,但我收到了运行时错误:
WinRT信息:在意外时间调用了一个方法。
答案 0 :(得分:0)
我通过更新项目目标解决了这个问题。该解决方案中的其他项目针对的是Windows8.1,而这个项目则针对的是Windows8。当我更新目标时,错误消失了,应用程序已构建并运行。