在静态方法中等待

时间:2014-05-01 23:06:02

标签: c# async-await

我有一个方法可以用来从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,它是帮助类

2 个答案:

答案 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();

});