使异步任务接口向后兼容monodroid

时间:2013-03-05 12:29:06

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

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

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

1 个答案:

答案 0 :(得分:1)

从技术上讲,您 不能使用async / await;它比“手动”做起来容易得多。您的实现只需返回从不Task且已经启动null的{​​{1}}(如果适用)。

TAP document有一些有用的技巧和指南。一个键类型是TaskCompletionSource<TResult>,您可以使用它来包装任何异步实现(例如,APM)。同步实现可以使用Task.FromResult(这只是TaskCompletionSource的一个小包装。如果你有CPU工作要做,你可以使用Task.Factory.StartNewclosely related but not quite equivalent to {{1对于更复杂的实现,您需要延续la Task.Run

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