在静态方法中等待
本文关键字:等待 静态方法 | 更新日期: 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();
});