我在Windows RT中使用SOAP客户端,我正在使用Windows 8.1操作系统和VS 2013.无论如何,我想要做的只是一个简单的任务,它会返回一些字符串值。
当我尝试等待 - 异步任务时它不会返回任何内容或者它只是简单地失去了自己试图找到客户端。我找不到问题。
我添加了服务引用,当我在对象浏览器中查看它时似乎没有问题。我知道为什么会这样吗?
这是我的代码:
using Namespace.InfoGetter;
private void btn_Click(object sender, RoutedEventArgs e)
{
Info info = GetInfo("en-US");
txtInfo.Text = info.Result.Value;
}
async Task<Info> GetInfo(string culture)
{
InfoSoapClient client = new InfoSoapClient();
Task<InfoResponse> info = client.GetInfoAsync(culture); <<<<<<<<<<<
Info result = await info;
return result;
}
当调试到达该行时(我放置&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;怎么办?
答案 0 :(得分:1)
由于您的代码示例不准确,我假设发生的事情是您有死锁,因为您在info.Result
等待时阻止了GetInfo
试图将工作编组回你的UI线程。
我们将async
关键字添加到您的按钮点击事件处理程序和await
上的GetInfoAsync
试试这个:
private async void btn_Click(object sender, RoutedEventArgs e)
{
Info info = await GetInfoAsync("en-US");
textInfo.Text = info.Value
}
private Task<Info> GetInfoAsync(string culture)
{
InfoSoapClient client = new InfoSoapClient();
return client.GetInfoAsync(culture);
}
注意我在GetInfo方法中添加了Async后缀以遵循TAP约定并从async
中删除GetInfoAsync
关键字,因为您实际上并不需要生成额外的状态机返回是返回结果而不是用它做额外的工作。