1

我即将为 Microsoft.Threading.Tasks.Extensions 编写一个 shim 程序集,以便能够构建 Mono 项目(我在此处描述了这个问题),但有些事情我不确定。

1)程序集包含以下方法(一些具有多个重载):

  • 从取消,
  • HandleEapCompletion
  • 读取异步
  • 写异步
  • 刷新异步
  • 复制到异步
  • CopyToAsyncInternal
  • 读块异步
  • 读线异步
  • ReadToEndAsync
  • 写线异步
  • 获取响应异步
  • GetRequestStreamAsync

如何找出我应该转发哪些类型以及实现哪些方法?那些应该转发的,我应该把它们重定向到哪里?在这种情况下,我怀疑我将不得不提供实现,因为它们在 Mono 程序集中不存在,但我怎么确定呢?

2)我需要实现或类型转发所有内容,还是只需要在我的代码中使用的东西?在后一种情况下,如果我跳过一些必需的类型或方法,我怎么知道?我注意到我没有收到缺少方法的编译器错误-它只抱怨缺少程序集,而没有提示它正在寻找什么方法。如果我留下未转发的类型或未实现的方法,我会从编译器那里得到任何提示吗?

更新。那里定义了两种类型:System.Threading.Tasks.TaskServices 和 AsyncExtensions。Android/Touch 项目都不知道它们。我只能转发程序集引用的类型,而这两个不是。这是否意味着我必须实施它们?

4

1 回答 1

2

你不应该是真正的类型转发方法——相反,你应该是类型转发类型。

我的建议 - 基于我对 System.Windows 和 System.Net 所做的 - 是首先对引用程序集中的所有类型进行类型转发。

在你这样做之后——当你构建时——你可能会发现一些不会向前输入的东西。对于那些你可以:

  • 只是错过它们 - 在这种情况下,某些代码稍后会在运行时失败,并出现一些Missing异常变体。
  • 实现存根版本 - 有自由的帮助NotImplementedException
  • 实现替换版本(虽然我会回避这样做 - 可能会更好地与 Mono 人员交谈并尝试修补 Mono 实现)

我相信新的 Mono3Async代码实现非常完整——所以我认为你不应该遇到太多问题。

于 2013-05-07T18:57:15.377 回答