【发布时间】:2013-06-20 15:35:09
【问题描述】:
我必须为 WinCE 5.0 开发一个应用程序,该应用程序与常规 PC 应用程序通信/同步数据,该应用程序提供可以与我的移动(工业)设备通信的 Web 服务。
由于很明显会导致代码在移动设备端难以维护(检查连接→完成时:检查Web服务可用性→完成时:检查移动设备是否符合同步条件→完成时开始交换数据)我很想使用awaits 的同步编程方式。
我找到了 Daniel Grunwald 的一些 code snippet,这是编译器为 async/await 功能所需的东西的最小实现。例如,与实现 Task 类型的 Task Parallel Library for .Net 3.5 (我不得不稍微改变一下,因为某些调用的方法不存在所需的签名)一起,它看起来很有希望。
到目前为止,解决方案还没有建立,因为我缺少TaskCompletionSource 的实现。我用 ILSpy 反编译了最近的 mscorlib,但代码不可用 - 使用的类型太多,CF 中不存在。
此时我想知道这个项目是否注定会失败,因为我永远不会说服 VS 2008(我必须单独使用它来针对智能设备)使用 C# 5 编译器(也许有解决方法? ),或者 CF 缺少 TaskCompletionSource 的关键类型(我可能需要它,因为我想让事件可等待),或者 TPL3.5 + Grunwald 的 sn-p + TCS 实现将构建但从未实际工作。
能否请更有经验的人评估我的意图?很想听听您的 cmets、想法和替代方法。谢谢。
更新 Aaron Stainback's post 表示应该可以使用 VS2012 构建 CF 3.5。这至少应该解决编译器问题。
【问题讨论】:
-
嗨,大卫。我已经编写了自己的
BackgroundWorker版本以在我们拥有的移动设备上实现。然而,并行处理需要一个多核处理器,否则它只会在单个进程中运行。除了让这个按书面工作,你的目标是什么? -
@jp2code:我想构建一个可维护的项目,在该项目中很容易理解要采取特殊操作所需的事件的级联发生(参见带有 → 符号的部分)。我想我会使用确定性自动机来处理它——实际上 async/await 被编译器转换为 FSM。找到一种“重用”已经实现的机制而不是重新发明轮子的方法真是太棒了。希望我没有误解你的问题。
标签: .net-3.5 windows-mobile compact-framework windows-ce async-await