在静态方法中等待

本文关键字:等待 静态方法 | 更新日期: 2023-09-27 18:01:19

我有一个方法,我使用从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应用程序中的web链接,它是辅助类

在静态方法中等待

您的第一次尝试更接近于做正确的事情,调用task.Wait()task.Result是阻塞调用,通常会导致死锁。查看这篇文章,了解async/await的最佳实践。

你想做的是你已经做过的:

var task = _tempClient.GetteststringAsync();
string teststring = await task;

调用_tempClient.GetteststringAsync()将开始在线程池线程上执行,一旦完成,结果将返回到teststring,该方法的其余部分将在原始请求线程上执行。此时,你只需要对teststring做任何你需要做的事情。

我用

http://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx使用这段代码看起来像

AsyncPump.Run(async delegate
{
    await DemoAsync();
});