【问题标题】:Making async Task interface backwards compatible with monodroid使异步任务接口向后兼容 monodroid
【发布时间】:2013-03-05 12:29:05
【问题描述】:

我有一堆接口用于核心类库中的存储库,将返回类型定义为任务。这些接口在其他项目中用于定义异步方法。

我需要在 Xamarain monodroid 项目中实现这些相同的接口,并且想知道如何在不使用异步等待的情况下使用相同的返回类型,因为 MonoDroid 尚不支持。如果可能的话,我根本不想修改现有的核心库接口。

【问题讨论】:

  • 也许看看Microsoft.Bcl,它为 WP7 提供异步和等待。还有一个名为AsyncBridge 的项目为 PCL、Xamarin.Android 和 Xamarin.iOS 实现了Tasks

标签: c# xamarin.android xamarin xamarin-studio


【解决方案1】:

从技术上讲,你没有使用async/await;这比“手工”做要容易得多。您的实现只需要返回 Tasks,它们永远不是 null 并且已经开始(如果适用)。

TAP document 有一些有用的技术和指南。一种密钥类型是TaskCompletionSource<TResult>,您可以使用它来包装任何异步实现(例如,APM)。同步实现可以使用Task.FromResult(这只是TaskCompletionSource的一个小包装。如果你有CPU工作要做,你可以使用Task.Factory.StartNew,即closely related but not quite equivalent toTask.Run。对于更复杂的实现,你会需要继续ContinueWith

换句话说,所有 .NET 4.0 TPL 技术都可以使用,只要始终启动您返回的Tasks。 (获得未启动的Task 的唯一方法是使用Task 构造函数构造它,而不是调用Start。所以只要你不这样做,你应该没问题。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多