【问题标题】:Asynchronous architecture异步架构
【发布时间】:2009-06-03 22:44:22
【问题描述】:

我有一个通过网页 UI 显示的 C# 库。当然还有 UI 层,它通过业务逻辑层进行调用,然后访问数据访问层以检索数据。数据实际上是通过具有异步查询数据能力的 Web 服务检索的。

我开始学习如何异步处理请求以加快页面时间(使用多个线程尽快从 Web 服务中获取多个项目),以及通过线程不被捆绑的可扩展性时间。

鉴于我的代码的三层架构,这是否意味着页面通过业务层异步调用(并因此通过并发请求来加速),而数据层中的 Web 服务反过来也会使其异步请求?处理所有回调的逻辑正在伤害我的大脑。有这种方法的资源吗?

【问题讨论】:

    标签: c# architecture asynchronous


    【解决方案1】:

    如果您能忍受引入一门新语言,F# 非常擅长编写异步代码,恕我直言,除了简洁之外,它也是它的主要优势之一。编写异步代码看起来几乎与线性非异步代码一模一样!

    相关链接:

    如果您不想引入新语言,这里有一种使用迭代器来简化代码的技术:

    【讨论】:

      【解决方案2】:

      有一个有点用的概念叫做Future<T>,它代表了一个异步工作的单元,在将来要完成。

      因此,简单来说,在某些操作(如应用启动或页面加载)开始时,您可以定义将来需要哪些值,并让后台线程为您计算它们。

      当您的用户需要特定值时,您只需从相应的Future<T> 中请求它。如果它已经完成,你立即得到它,否则你将不得不阻塞你的主线程,或者以某种方式通知用户该值还没有准备好。

      关于这个概念的一些讨论你可以找到here

      【讨论】:

        【解决方案3】:

        我猜你有两个区域可以处理来自以下的回调:

        • 数据层 -> 业务对象
        • 业务对象 -> 表示层

        对于第一个,我将使用代码生成来自动为所有方法创建 aysnc 和回调逻辑。如果你有很多非常接近相同的类,那么这会很好。

        对于第二个领域,我倾向于使用数据绑定来“自动”更新 UI,因为下面的对象正在填充。

        【讨论】:

          猜你喜欢
          • 2013-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-24
          • 2013-07-11
          • 1970-01-01
          相关资源
          最近更新 更多