我有一个方法可以用来从Web服务中获取字符串
我用
启动了代码 var task = _tempClient.GetteststringAsync();
string teststring = await task;
但我注意到代码不会等到调用结束并检索到值,所以我尝试了类似
的内容 string teststring= string.Empty;
var t1 = Task.Factory.StartNew(new Func<Task>(async () => teststring= await _tempClient.GetteststringAsync()))
.Unwrap();
t1.Wait();
但是这会导致应用程序卡住,任何想法如何使其工作,tempClient是一个服务引用对象。我用它来初始化MVC应用程序中的webrefrence,它是帮助类
答案 0 :(得分:1)
你的第一次尝试更接近做正确的事情,调用task.Wait()
或task.Result
是一个阻塞调用,并且经常会导致死锁。请查看this article async/await
最佳做法。
你想要做的就是你先拥有的东西:
var task = _tempClient.GetteststringAsync();
string teststring = await task;
调用_tempClient.GetteststringAsync()
将在线程池线程上开始执行,一旦完成,结果将返回到teststring
,其余方法将在原始请求线程上执行。此时,您只需要使用teststring
执行任何操作。
答案 1 :(得分:0)
我用
解决了它 使用此代码的http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx类似于
AsyncPump.Run(async delegate
{
await DemoAsync();
});