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

本文关键字:monodroid 异步 任务 接口 | 更新日期: 2023-09-27 18:02:12

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

我需要在Xamarain monodroid项目中实现这些相同的接口,我想知道如何在不使用async await的情况下使用相同的返回类型,因为monodroid还不支持这一点。如果可能的话,我根本不想修改现有的核心库接口。

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

从技术上讲,您不需要使用async/await;这比"手工"要容易得多。您的实现只需要返回从未是null并且已经启动的Task(如果适用(。

TAP文件有一些有用的技巧和指导方针。一种密钥类型是TaskCompletionSource<TResult>,您可以使用它来包装任何异步实现(例如APM(。同步实现可以使用Task.FromResult(它只是TaskCompletionSource的一个小包装。如果你有CPU工作要做,你可以使用与Task.Run密切相关但不完全等效的Task.Factory.StartNew。对于更复杂的实现,你需要一个la ContinueWith的延续。

换句话说,所有的。NET 4.0 TPL技术是可以使用的,只要您返回的Task总是启动的。(获得未启动的Task的唯一方法是使用Task构造函数构建它,而不是调用Start。因此,只要你不这样做,你就应该没事了。(