C#异步调用期间的快速数据封装

时间:2011-07-22 07:34:00

标签: c# asynchronous

我正在编写(尝试)具有以下3层的客户端服务器应用程序:

  1. TcpClient和TcpServer的客户端和服务器包装类,处理连接,多线程和NetworkStream读取/阻止/写入例程。
  2. 业务逻辑BizClient和BizServer,它实现协议并仅公开隐藏基础协议的“FetchDataFromServer()”方法。
  3. 应用程序和UI级别。此级别包含BizClient和BizServer作为Windows服务,控制台应用程序或WinForms应用程序运行。
  4. 现在我正在实现对第1层上的异步调用的支持。 .NET风格的异步调用通常涉及一个对象状态,以便回调可以知道它应该从哪里继续。

    最后在每个层上从3到1到.NET框架,我必须从上层封装对象状态,添加当前层的状态,然后传递到下一个下层。这意味着在每一层上编写一个不同的结构,看起来很麻烦。

    struct State
    {
       object bizState; // cannot know higher layer state type at lower layers   
       object muchInfo;
    }
    
    struct BizState
    {
       object appState;
       object muchInfo;
    }
    
    struct AppState
    {
       object muchInfo;
    }
    

    有没有更好更快的方法来做,而不是编写结构来包装状态?

1 个答案:

答案 0 :(得分:1)

嗯,技术上:不;但是,这个问题有很多变通方法。考虑使用通用状态对象(转储结构),它可以具有InnerState(就像异常一样)。你也可以选择不关注状态对象(它们主要是在我们没有lambda和匿名方法的.NET早期阶段使用)而是依赖于闭包。最后你可以跳过基于事件的异步并依靠TPL。