您可以使用此解决方法在 .Net 4.0 中创建基于异步任务的 wcf 客户端
- 打开 NuGet 并将“Microsoft.Bcl.Async”包添加到您的 .Net 4.0 项目中
- 使用与 .Net 4.0 项目同名的新 .Net 4.5 项目创建新解决方案
- 添加与在 .Net 4.0 项目中创建的服务引用同名的服务引用(到所需的 Web 服务)
- 确保在高级选项对话框中选中“允许生成异步操作”下的“生成基于任务的操作”选项
- 打开 .Net 4.5 项目的服务参考文件夹(“NET_4.5_PROJECT_FOLDER\Service References\YOUR__SERVICE_REFERENCE_FOLDER\”)
- 复制文件夹中的所有文件
- 打开 .Net 4.0 项目的服务参考文件夹(“NET_4.0_PROJECT_FOLDER\Service References\YOUR__SERVICE_REFERENCE_FOLDER\”)
- 粘贴您之前复制的文件(到 .Net 4.0 服务参考文件夹)(来自 .Net 4.5 服务参考文件夹)
总之,您必须在 .Net 4.5 中生成服务引用并将其复制到您的 .Net 4.0 项目中。必须将“Microsoft.Bcl.Async”包添加到您的 .Net 4.0 项目中。
编辑
我发现这种解决方法只有在计算机上安装了 .Net Framework 4.5 时才有效。如果您在安装了 .Net Framework 4.0 的计算机上运行该程序,则它不起作用(.Net Framework 4.5 不支持 Windows XP,因此这是一个测试程序的好环境)。未安装 .Net Framework 4.0 时会引发此异常:
无法序列化类型“System.Threading.Tasks.Task`1[System.Boolean]”。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果该类型是一个集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。
总而言之,这不是一个好的解决方法。