我有一堆核心类库中的存储库接口,它将返回类型定义为Task。这些接口在其他项目中用于定义异步方法。
我需要在Xamarain monodroid项目中实现这些相同的接口,并且想知道如何在不使用异步等待的情况下使用相同的返回类型,因为在MonoDroid中尚不支持。如果可能的话,我根本不想修改现有的核心库接口。
答案 0 :(得分:1)
从技术上讲,您 不能使用async
/ await
;它比“手动”做起来容易得多。您的实现只需返回从不Task
且已经启动null
的{{1}}(如果适用)。
TAP document有一些有用的技巧和指南。一个键类型是TaskCompletionSource<TResult>
,您可以使用它来包装任何异步实现(例如,APM)。同步实现可以使用Task.FromResult
(这只是TaskCompletionSource
的一个小包装。如果你有CPU工作要做,你可以使用Task.Factory.StartNew
,closely related but not quite equivalent to {{1对于更复杂的实现,您需要延续la Task.Run
。
换句话说,只要始终启动返回的ContinueWith
,就可以使用所有.NET 4.0 TPL技术。 (获取未启动的Task
的唯一方法是使用Task
构造函数构建它,而不是调用Task
。所以只要你不这样做,你应该没问题。 )