异步/等待紧凑框架v3.5 - 手动实现

时间:2013-06-24 07:35:04

标签: .net-3.5 windows-mobile compact-framework windows-ce async-await

我必须为WinCE 5.0开发一个应用程序,该应用程序与常规PC应用程序通信/同步数据,该应用程序提供我可以与移动(工业)设备通信的Web服务。

由于很明显导致在移动设备端难以维护的代码(检查连接→完成时:检查网络服务可用性→完成时:检查移动设备是否有资格进行同步→完成开始交换数据时)我很乐意使用await s。

来使用同步编程方式

我找到了Daniel Grunwald的一些code snippet,这是编译器为async / await功能所需的东西的最小实现。与Task Parallel Library for .Net 3.5(我必须稍微改变,因为某些方法称为不存在需要签名)一起实现了Task类型,它看起来很有希望。

到目前为止,该解决方案尚未构建,因为我缺少TaskCompletionSource的实现。我用ILSpy反编译了最近的mscorlib,但是代码不可用 - 使用中的类型太多,CF中没有。

此时我想知道这个项目是否一定会失败,因为我永远不会说服VS 2008(我必须使用ordner来定位智能设备)来使用C#5编译器(也许有一个解决方法? )或者CF缺少TaskCompletionSource的关键类型(我可能需要这样做,因为我想让事件等待),或者TPL3.5 + Grunwald的片段+ TCS实现将构建但从未真正起作用。

有人可以更有经验吗?请评价我的意图?很想听听你的意见,想法和其他方法。感谢。

更新 Aaron Stainback's post表示应该可以使用VS2012构建CF 3.5。这应该至少解决编译器问题。

2 个答案:

答案 0 :(得分:2)

我认为将async - await的支持添加到一个本身不支持它的平台应该是可行的,因为这正是Microsoft.Bcl.Async为.Net 4.0所做的事情。< / p>

但是使用async - await需要支持它的编译器,没有办法解决这个问题。这意味着VS 2012或可能VS 2010与Async CTP(但我不建议这样,它不是生产质量)。据我所知,没有办法让这个与VS 2008一起使用。

另一种可能性是使用Mono,但我不知道它是否支持WinCE。

答案 1 :(得分:1)

您可以按照以下说明使用Visual Studio 2015编译到Compact Framework 3.5:

  • 安装'.NET Compact Framework 3.5 Redistributable';
  • 从' C:\ Program Files(x86)\ Microsoft.NET \ SDK \ CompactFramework \ v3.5 \ WindowsCE '复制文件;
  • 将文件粘贴到' C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v3.5 \ Profile \ CompactFramework '目录;
  • 创建名为“ RedistList ”;
  • 的目录
  • 在' RedistList '目录中创建名为' FrameworkList.xml '的文件;
  • 将以下内容设置为创建的文件:

    <?xml version="1.0" encoding="utf-8"?>
    <FileList Redist="Net35-CF" Name=".NET Compact Framework 3.5">
    </FileList>
    

现在,您可以在Visual Studio 2015上创建 .NET Core Class Library 项目,并定位' net35-cf '框架。

要使用async / await,您可以使用 System.Threading.Tasks.WindowsCE 包。

可在以下位置找到示例项目:https://github.com/WindowsCE/System.Collections.Concurrent/tree/08669ca5b45cc5c74c8c225a633828f9e26b5276

免责声明:我是上述程序包和项目的作者。