Silverlight 中基于任务的数据服务

Posted

技术标签:

【中文标题】Silverlight 中基于任务的数据服务【英文标题】:Task-Based data service in Silverlight 【发布时间】:2012-02-16 14:16:19 【问题描述】:

我正在尝试使用等待/异步“模式”(使用 SL5 和 VS11)编写 silverlight 应用程序,但我无法在服务配置中选择“生成基于任务的操作”,这应该是可能的吗(然而)?在网上找不到太多详细信息(特定于 SL)...

【问题讨论】:

我能够重现您的情况:对于 SL 项目,服务参考设置对话框的整个“客户端”部分已禁用。您可能想打开一个 Microsoft Connect 问题,以便在 VS11 发布之前提出它。 谢谢斯蒂芬,所以我不需要为此去精神病院管理自己:) 我为此添加了一个 MS Connect 问题,目前还没有活动:connect.microsoft.com/VisualStudio/feedback/details/722368/… 【参考方案1】:

我已经能够在 Silverlight 5 和 Visual Studio 2010 中手动创建基于任务的异步服务代理。 像魅力一样工作。 我个人更喜欢手动编写合同和服务代理,但如果您喜欢使用 Generate Service 参考,您可以查看this post - WCF + Tasks。

【讨论】:

这与引入 VS11 的 await/async 功能有什么关系? (或就此而言的异步 CTP?) 据我所知,您可以对任何返回 Task 或 Task 的方法使用 async/await 语法。【参考方案2】:

我认为 Silverlight 不支持它,但你可以自己做,也许可移植类库是另一种解决方法。

public class MyCServiceProxy

    public static Task<ObservableCollection<MyC>> GetMyCs()
    
        var tcs = new TaskCompletionSource<ObservableCollection<MyC>>();

        var client = new MyCServiceClient();

        client.GetMyCsCompleted += (s,e) => ;

        client.GetMyCsAsync();

        return tcs.Task;
    

【讨论】:

以上是关于Silverlight 中基于任务的数据服务的主要内容,如果未能解决你的问题,请参考以下文章

Silverlight 中的多任务和多线程

Swift 编译器中间码 SIL

Silverlight套接字或db请求?

Silverlight 启用 WCF 服务、Web 服务、ADO.NET 数据服务

对SIL9022/9024的配置

与 Silverlight 一起使用的基于云的良好文件存储平台是啥?