是否可以在ServiceStack的服务器方法上利用async / await?谷歌搜索提出了一个fork of ServiceStack似乎可以做到这一点,但它几个月没有更新,如果该代码已合并到当前正式版本(v3.9.32),则没有信息。
我使用async / await模式构建了一个简单的服务,它的行为不正确,但我想知道这是否只是一个配置问题。这是代码:
public class PodcastService : Service
{
public async Task<object> Get(Podcast request)
{
var client = new WebClient();
var data = await client.DownloadStringTaskAsync("http://www.google.fi");
return new PodcastResponse() { Date = DateTime.Now };
}
}
这是方法返回的JSON:
{"Result":{"__type":"WebApplication2.PodcastResponse, WebApplication2","Date":"2012-12-10T17:18:32.1653985+02:00"},"Id":1,"Status":"RanToCompletion","IsCanceled":false,"IsCompleted":true,"CreationOptions":0,"IsFaulted":false}
为了比较,这里是没有任何async / await的相同方法:
public class PodcastService : Service
{
public object Get(Podcast request)
{
return new PodcastResponse() { Date = DateTime.Now };
}
}
这是结果:
{"Date":"2012-12-10T17:20:23.0245677+02:00"}
有什么想法吗? fork仍然是可行的方法,还是已经在ServiceStack中实现了async / await,但是需要一些配置?
答案 0 :(得分:3)
您可以检查项目状态here。异步分支仍处于“正在进行”阶段。
第一个结果看起来像一个序列化的Task对象,所以它们肯定还没有添加异步服务支持。
<强>更新强>
我们可以忘记async / await fork as ServiceStack goes commercial并获得v4的重写。最新的可用版本v3.9.62是feature-freeze version,因为开发切换到v4。